美文网首页
代码记录1

代码记录1

作者: 随心忧 | 来源:发表于2018-11-29 13:59 被阅读5次

    1 .控制器的基类

          - (void)viewDidLoad {

        [super viewDidLoad];

        [self setupViews];

        //判断是否有上级页面,有的话再设置返回按钮

        if ([self.navigationController.viewControllers indexOfObject:self] != 0) {

            [self setupLeftBarButton];

        }

    }

    - (void)setupViews {

        //设置应用的背景色

        self.view.backgroundColor = [UIColor lightGrayColor];

        //不允许 viewController 自动调整,我们自己布局;如果设置为YES,视图会自动下移 64 像素

        self.automaticallyAdjustsScrollViewInsets = NO;

    }

    #pragma mark - 自定义返回按钮

    - (void)setupLeftBarButton {

        //自定义 leftBarButtonItem ,UIImageRenderingModeAlwaysOriginal 防止图片被渲染

        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]

                                                 initWithImage:[[UIImage imageNamed:@"Back-蓝"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

                                                 style:UIBarButtonItemStylePlain

                                                 target:self

                                                 action:@selector(leftBarButtonClick)];

        //防止返回手势失效

        self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

    }

    - (void)leftBarButtonClick {

        [self.navigationController popViewControllerAnimated:YES];

    }

    2. 隐藏 navigationControll 左侧的返回按钮

        self.navigationItem.hidesBackButton = YES;

        self.navigationItem.rightBarButtonItem.customView.hidden = YES;

    3. 改变 button 内部的图片以及文字的偏移量

       //已经做了适配,各位可以根据需要做屏幕适配

        self.changeSpecialistBtn.titleEdgeInsets = UIEdgeInsetsMake(0, -lengthFit(16), 0, 0);

        self.changeSpecialistBtn.imageEdgeInsets = UIEdgeInsetsMake(0, lengthFit(76), 0, 0);

    4. tableView 滚动时自动收起键盘

        self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

    5.  判断上级页面是哪个页面

         NSArray *array = self.navigationController.viewControllers;

    6.  设置导航栏右部点击按钮,并添加点击事件

          //添加文字按钮

        UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(editor)];

        self.navigationItem.rightBarButtonItem = rightBarButton;

    // 添加图片按钮

        UIBarButtonItem *rightBarBtn = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"图片名"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(rightBarButtonEvent)];

        [self.navigationItem setRightBarButtonItem:rightBarBtn];

    7.  给 view 添加手势,并加入点击事件

        UITapGestureRecognizer *operationTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(gotoCapture:)];

        [self.operationView addGestureRecognizer:operationTap];

    8. 设置图片拉伸 

        UIImage *bgImage = [UIImage imageNamed:@""];

      bgImageView.image = [bgImage stretchableImageWithLeftCapWidth:15 topCapHeight:15];

    9. 改变导航栏标题的颜色

       UIColor *color = [UIColor cyanColor];

        NSDictionary *dictionary = [NSDictionary dictionaryWithObject: color forKey:NSForegroundColorAttributeName];

        self.navigationController.navigationBar.titleTextAttributes = dictionary;

    10.  UISwitch控件,需要更改它的大小

       //改变UISwitch  的大小,CGAffineTransformMakeScale(CGFloat x, CGFloat y) 对 view 的长和宽进行缩放,不改变 view 的中心点

    self.orderSwitch.transform = CGAffineTransformMakeScale(0.7, 0.7); 

    // 改变 UISwitch 开启时的颜色

    self.orderSwitch.onTintColor = KXColorBlue;

    11. 加载本地的 HTML 文件

        NSString *resourcePath = [[NSBundle mainBundle] resourcePath];

        NSString *filePath = [resourcePath stringByAppendingPathComponent:@"serviceDescription.html"];

        NSString *htmlString = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

        [self.webView loadHTMLString: htmlString baseURL: [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

    12.  iOS项目开发中用的一部分宏定义

    // 屏幕尺寸

    #define mainScreenWidth [UIScreen mainScreen].bounds.size.width

    #define mainScreenHeight [UIScreen mainScreen].bounds.size.height

    // 屏幕适配比例,分别为x,y,w,h

    #define X(__x__) ((__x__) /375.0* mainScreenWidth)

    #define Y(__y__) ((__y__) /667.0* mainScreenHeight)

    #define W(__w__) ((__w__) /375.0* mainScreenWidth)

    #define H(__h__) ((__h__) /667.0* mainScreenHeight)

    //顶部状态栏和导航栏高度

    #define kSafeAreaTopHeight (kStatusBarHeight +44)

    //底部高度

    #define kSafeAreaBottomHeight (kStatusBarHeight >20?34:0)

    //顶部状态栏高度

    #define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height

    //底部安全距离

    #define kTabBarHeight (kStatusBarHeight >20?83:49)

    13.  自定义 leftBarButtonItem 返回按钮时,防止返回手势失效的办法

         - (void)setupLeftBarButton {

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]

                                                 initWithImage:[[UIImage imageNamed:@"Back-蓝"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

                                                    style:UIBarButtonItemStylePlain

                                                    target:self

                                                    action:@selector(leftBarButtonClick)];

        self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

    }

    - (void)leftBarButtonClick {

        [self.navigationController popViewControllerAnimated:YES];

    }

    14.  不允许 viewController 自动调整

         self.automaticallyAdjustsScrollViewInsets = NO;

    15.  去空格

         //去掉两端的空格

            [trimString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

            //去掉所有空格

            [trimString stringByReplacingOccurrencesOfString:@" " withString:@""];

    16.  判断字符串中是否包含非法字符

         if ([self.searchText.text rangeOfString:@"'"].location != NSNotFound) {

            //用封装好的提示框提示

            [CommunityPublicClass showHUDwithLabelText:@"您输入的字符不合法" andDetailsLabelText:nil];

            return;

        }

    17. 判断字符串是否为空

        + (BOOL)isBlankString:(NSString *)string {

        if (string == nil || string == NULL) {

            return YES;

        }

        if ([string isKindOfClass:[NSNull class]]) {

            return YES;

        }

        if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {

            return YES;

        }

        return NO;

    }

    18.  导航栏的正确隐藏方法

         [self.navigationController setNavigationBarHidden:YES animated:YES];

        self.navigationController.navigationBarHidden = YES;

    19. Xcode中的自定义的代码片段一般存放在:

    ~/Library/Developer/Xcode/UserData/CodeSnippets

    20. masonry下的动画

        修改约束后调用  [view.superview layoutIfNeeded];

    [view mas_makeConstraints:^(MASConstraintMaker *make) {

    make.top.mas_equalTo(400);

    }];

    [view.superview layoutIfNeeded];//如果其约束还没有生成的时候需要动画的话,就请先强制刷新后才写动画,否则所有没生成的约束会直接跑动画

    [UIView animateWithDuration:3 animations:^{

    [view mas_updateConstraints:^(MASConstraintMaker *make) {

    make.left.mas_equalTo(200);

    }];

    [view.superview layoutIfNeeded];//强制绘制

    21.  跳到指定的设置界面

     URL Types添加 一个叫prefsURL Schemes

           [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“跳转不同界面对应的URLString"]]

    蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID

    VPN — prefs:root=General&path=Network/VPN

    Wi-Fi:prefs:root=WIFI

    定位服务:prefs:root=LOCATION_SERVICES

    个人热点:prefs:root=INTERNET_TETHERING

    关于本机:prefs:root=General&path=About

    辅助功能:prefs:root=General&path=ACCESSIBILITY

    飞行模式:prefs:root=AIRPLANE_MODE

    锁定:prefs:root=General&path=AUTOLOCK

    亮度:prefs:root=Brightness

    蓝牙:prefs:root=General&path=Bluetooth

    时间设置:prefs:root=General&path=DATE_AND_TIME

    FaceTime:prefs:root=FACETIME

    设置:prefs:root=General

    键盘设置:prefs:root=General&path=Keyboard

    iCloud:prefs:root=CASTLE

    iCloud备份:prefs:root=CASTLE&path=STORAGE_AND_BACKUP

    语言:prefs:root=General&path=INTERNATIONAL

    定位:prefs:root=LOCATION_SERVICES

    音乐:prefs:root=MUSIC

    Music Equalizer — prefs:root=MUSIC&path=EQ

    Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit

    Network — prefs:root=General&path=Network

    Nike + iPod — prefs:root=NIKE_PLUS_IPOD

    Notes — prefs:root=NOTES

    Notification — prefs:root=NOTIFICATIONS_ID

    Phone — prefs:root=Phone

    Photos — prefs:root=Photos

    Profile — prefs:root=General&path=ManagedConfigurationList

    Reset — prefs:root=General&path=Reset

    Safari — prefs:root=Safari

    Siri — prefs:root=General&path=Assistant

    Sounds — prefs:root=Sounds

    Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK

    Store — prefs:root=STORE

    Twitter — prefs:root=TWITTER

    Usage — prefs:root=General&path=USAGE

    Wallpaper — prefs:root=Wallpaper

    22.  到Safari

        NSString*url =@"http://www.baidu.com";//把http://带上

        [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:url]];

    23. 到App Store

        NSString* appstoreUrlString =@"itms-apps://itunes.apple.com/cn/app/hun-lian-dui-xiang/id1276460105?mt=8";

        NSURL* url = [NSURLURLWithString:appstoreUrlString];

        if([[UIApplicationsharedApplication]canOpenURL:url]) {

            [[UIApplicationsharedApplication]openURL:url];   

        } else{

            NSLog(@"can not open");

        }

    24.  评价APP

        NSString*appstoreUrlString = [NSStringstringWithFormat:

                                      @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@",                                  @"1276460105"];

        NSURL* url = [NSURLURLWithString:appstoreUrlString];

        if([[UIApplicationsharedApplication]canOpenURL:url]) {

            [[UIApplicationsharedApplication]openURL:url];

        } else {

            NSLog(@"can not open");

        }

    25. view抖动

        CAKeyframeAnimation *keyAnima=[CAKeyframeAnimation animation];

        keyAnima.keyPath=@"transform.rotation";

        keyAnima.duration=0.1;

        keyAnima.values=@[@(-angle2Radian(4)),@(angle2Radian(4)),@(-angle2Radian(4))];

        keyAnima.repeatCount=MAXFLOAT;

        keyAnima.fillMode=kCAFillModeForwards;

        keyAnima.removedOnCompletion=NO;

        for (int i = 0;i < _viewArray.count;i++) {

            UIView * view = [_viewArray objectAtIndex:i];

            UIButton * btn = [_buttonArray objectAtIndex:i];

            [view addSubview:btn];

            [view.layer addAnimation:keyAnima forKey:@"shake"];

            NSArray *allGesture = view.gestureRecognizers;

            for (UIGestureRecognizer *gesture in allGesture) {

                [view removeGestureRecognizer:gesture];

            }

        }

        UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cancleDelete)];

        [backGroundView addGestureRecognizer:tap];

    26.  AFNetwoking的默认Content-Type是application/x-www-form-urlencodem。若服务器要求Content-Type为applicaiton/json,为了和服务器对应,就必须修改AFNetworking的Content-Type。

    关于Content-Type的概念和Post常见的的提交数据方式请见博客:https://www.imququ.com/post/four-ways-to-post-data-in-http.html。

    简单来说,服务器通过识别Content-Type来识别传送的数据类型,分辨传送的数据到底是文本,图片或者是其他。如果服务器不识别对应的Content-Type,那么就会返回错误415.

    修改Content-Type代码如下:

    AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager];

    manager.requestSerializer = [AFJSONRequestSerializer serializer];  

    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];  

    27  时间转换

    将日期时间转化为字符串

    // 实例化NSDateFormatter

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 设置日期格式

        [formatter setDateFormat:@"yyyy-mm-dd HH:mm:ss"];

    // 获取当前日期

        NSDate *currentDate = [NSDate date];

        NSString *currentDateString = [formatter stringFromDate:currentDate];

        NSLog(@"%@", currentDateString);

    将时间字符串转换为日期

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 要转换的日期字符串

        NSString *dateString = @"2011-05-03 23:11:40";

    // 设置为UTC时区

    // 这里如果不设置为UTC时区,会把要转换的时间字符串定为当前时区的时间(东八区)转换为UTC时区的时间

        NSTimeZone *timezone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];

        NSDate *someDay = [formatter dateFromString:dateString];

        NSLog(@"%@", someDay);

    时间格式

    G:      公元时代,例如AD公元

    yy:    年的后2位

    yyyy:  完整年

    MM:    月,显示为1-12,带前置0

    MMM:    月,显示为英文月份简写,如 Jan

    MMMM:  月,显示为英文月份全称,如 Janualy

    dd:    日,2位数表示,如02

    d:      日,1-2位显示,如2,无前置0

    EEE:    简写星期几,如Sun

    EEEE:  全写星期几,如Sunday

    aa:    上下午,AM/PM

    H:      时,24小时制,0-23

    HH:    时,24小时制,带前置0

    h:      时,12小时制,无前置0

    hh:    时,12小时制,带前置0

    m:      分,1-2位

    mm:    分,2位,带前置0

    s:      秒,1-2位

    ss:    秒,2位,带前置0

    S:      毫秒

    Z:      GMT(时区)

    28  打印所有的系统字体

    //    NSArray *familyNames = [UIFont familyNames];

    //    for(NSString *familyName in familyNames ) {

    //        NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];

    //        for(NSString *fontName in fontNames ){

    //            printf( "\tFont: %s \n", [fontName UTF8String] );

    //        }

    //    }

    29  旋转文字

    button.titleLabel.transform =CGAffineTransformMakeRotation(M_PI_4);

    30.  阴影

    UIView的阴影设置主要通过UIView的layer的相关属性来设置

    阴影的颜色

    imgView.layer.shadowColor = [UIColor blackColor].CGColor;

    阴影的透明度

    imgView.layer.shadowOpacity = 0.8f;

    阴影的圆角

    imgView.layer.shadowRadius = 4.f;

    阴影偏移量

    imgView.layer.shadowOffset = CGSizeMake(4,4);

    即使偏移量为(0,0)时,围绕view的四周依然能看到一定阴影。

    当我们不设置阴影的偏移量的时候,默认值为(0,-3),既阴影有3个点的向上偏移量。为什么是向上偏移呢?这好像有点不合常理,其实这是由‘历史原因’造成的,阴影最先是在MacOS平台上出现的,默认是向下偏移3个点,我们知道MacOS的坐标系统和iOS坐标系统y轴方向是相反的,所以在iOS系统中由于y轴方向的改变就变成了默认向上偏移3个点。

    阴影的路径

    除了通过上面的操作,我们还可以设定阴影的路径

    路径阴影

    UIBezierPath *path = [UIBezierPath bezierPath];

    [path moveToPoint:CGPointMake(-5, -5)];

    //添加直线

    [path addLineToPoint:CGPointMake(paintingWidth /2, -15)];

    [path addLineToPoint:CGPointMake(paintingWidth +5, -5)];

    //设置阴影路径 

    imgView.layer.shadowPath = path.CGPath;

    31  去除数组中重复的对象

    NSArray *newArr = [oldArr valueForKeyPath:@“@distinctUnionOfObjects.self”];

    32.给一个view截图

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);

        [view.layer renderInContext:UIGraphicsGetCurrentContext()];

        UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

    33.设置navigationBar上的title颜色和大小

    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor youColor], NSFontAttributeName : [UIFont systemFontOfSize:15]}]

    34. 在window加label

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height + 88, [UIScreen mainScreen].bounds.size.width, 60)];

        label.backgroundColor = [UIColor blackColor];

        label.text = msg;

        label.textAlignment = NSTextAlignmentCenter;

        label.textColor = [UIColor whiteColor];

        label.font = [UIFont systemFontOfSize:24];

        [[UIApplication sharedApplication].keyWindow addSubview:label];

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            [label removeFromSuperview];

        });

    相关文章

      网友评论

          本文标题:代码记录1

          本文链接:https://www.haomeiwen.com/subject/jgtfcqtx.html