美文网首页iOS
iOS快捷小知识

iOS快捷小知识

作者: wuyukobe | 来源:发表于2019-06-28 17:06 被阅读17次
    一些有关iOS的快捷知识,做个留存,方便后期查看使用。

    1、判断是否是模拟器:

    #if TARGET_IPHONE_SIMULATOR
        NSLog(@"模拟器");
    #else
        NSLog(@"真机");
    #endif
    

    2、创建枚举:

    typedef NS_OPTIONS(NSUInteger, UIControlState) {
        UIControlStateNormal       = 0,
        UIControlStateHighlighted  = 1 << 0,
        UIControlStateDisabled     = 1 << 1,
    };
    

    3、定义字符串常量规范:(1)建议模仿苹果;(2)加上const 保证字符串不可更改;(3)应尽量保证可读性,不要怕句子太长。

    .h中:

    UIKIT_EXTERN NSString *const kUITableViewCellIdentifier; 
    

    .m中:

    NSString *const kUITableViewCellIdentifier = @"kUITableViewCellIdentifier";
    

    4、如果声明的属性,只想使用的get方法,不使用set方法,并且不想让外界更改这个属性的值,那么建议在括号里面加readonly。示例:

    @property(nonatomic,readonly,getter=isSelect) BOOL select;
    

    5、setImageEdgeInsets和setTitleEdgeInsets设置button的图片和文字显示位置(默认是左图右字,上移和左移都是负,反之为正)。想两改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。

    需要注意的是,对titleLabel和imageView设置偏移,是针对它当前的位置起作用的,并不是针对它距离button边框的距离的。
    [button setImageEdgeInsets:UIEdgeInsetsMake(0, imageEdge, 0, -imageEdge)];
    [button setTitleEdgeInsets:UIEdgeInsetsMake(0, titleEdge, 0, -titleEdge)];
    

    6、刷新Section:

    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
    

    7、Image转换NSString:

    - (NSString *)GainImageStringFromImage:(UIImage *)image {
        NSData * data = UIImageJPEGRepresentation(image, 1.0f);
        NSString * encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];;
        return encodedImageStr;
    }
    

    NSString转换Image:

    - (UIImage *)GainImageFromImageString:(NSString *)imageStr {
        NSData * data = [[NSData alloc] initWithBase64Encoding:imageStr];
        UIImage * image = [UIImage imageWithData:data];
        return image;
    }
    

    8、字典判断为空:

    [dict isKindOfClass:[NSNull class]]
    

    9、字典遍历:
    说明当stop为yes时,就会停止遍历,所以我们可以在块中加入条件(即当某种条件下去停止遍历)。

    [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
    }];
    

    10、设置UITextField的placeholder:

    UITextField *textField = [[UITextField alloc]init];
    textField.placeholder = @"请输入";
    textField.textColor = k_DefaultColor666666;
    textField.textAlignment = NSTextAlignmentRight;
    [textField setValue:k_DefaultColor999999 forKeyPath:@"_placeholderLabel.textColor"];
    [textField setValue:[UIFont systemFontOfSize:15] forKeyPath:@"_placeholderLabel.font"];
    textField.font = [UIFont systemFontOfSize:15];
    

    11、(1)typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

    typedef void (^Block)(void);
    

    (2)typeof 运算符返回一个用来表示表达式的数据类型的字符串。
    可能的字符串有:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

    alert(typeof (123));//typeof(123)返回"number" 
    alert(typeof ("123"));//typeof("123")返回"string"
    

    12、UIStoryboard创建:

    SecondViewController * second = [[UIStoryboard storyboardWithName:@"First" bundle:nil]instantiateViewControllerWithIdentifier:@"SecondViewController"];
    [self presentViewController:second animated:YES completion:nil];
    

    XIB创建:

    MainViewController * main = [[MainViewController alloc]initWithNibName:@"MainViewController" bundle:[NSBundle mainBundle]];
    
    BaseView * base = [[[NSBundle mainBundle]loadNibNamed:@"BaseView" owner:self options:nil] firstObject];
    

    13、模态试图:

    page.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    page.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    

    14、newRect = [someView convertRect:rect toView:toView];
    解释: rect是相对于someView的,以toView为坐标系重新计算rect的值
    newRect = [someView convertRect:rect fromView:fromView];
    解释: rect是以fromView为坐标系下的值,将rect转为以someView为坐标系的值
    https://www.jianshu.com/p/dcefe7150bfe


    15、比较两个xx是否一样:

    //比较两个frame是否一样
    CGRectEqualToRect(frame, CGRectZero)
    
    //比较两个point是否一样
    CGPointEqualToPoint(point, CGPointZero)
    
    //比较两个size是否一样
    CGSizeEqualToSize(size, CGSizeZero)
    

    16、打印frame:

    NSLog(@"%@",NSStringFromCGRect(self.frame));
    

    文档中:

    UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point);
    UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector);
    UIKIT_EXTERN NSString *NSStringFromCGSize(CGSize size);
    UIKIT_EXTERN NSString *NSStringFromCGRect(CGRect rect);
    UIKIT_EXTERN NSString *NSStringFromCGAffineTransform(CGAffineTransform transform);
    UIKIT_EXTERN NSString *NSStringFromUIEdgeInsets(UIEdgeInsets insets);
    UIKIT_EXTERN NSString *NSStringFromDirectionalEdgeInsets(NSDirectionalEdgeInsets insets) API_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));
    UIKIT_EXTERN NSString *NSStringFromUIOffset(UIOffset offset);
    

    17、快速打真机测试ipa包:
    (1)、创建空文件夹Payload;
    (2)、将项目中Products下的xxx.aap复制到文件夹中;
    (3)、压缩文件夹,该后缀名zip为ipa,则可获取ipa包。
    安装:pp助手-应用游戏-应用列表,直接将ipa拖到应用列表即可安装。


    18、获取绝对值:

    fabs(<#double#>)  // 得出double类型数的绝对值
    fabsf(<#float#>) // 得出float类型数的绝对值
    abs(<#int#>)  // 得出int类型数的绝对值
    

    19、访问麦克风权限:

    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
         if (granted) {
             NSLog(@"Authorized");
         }else{
             NSLog(@"Denied or Restricted");
         }
    }];
    

    20、设置没有弹簧反弹效果:

    scrollView.bounces = NO;//设置没有弹簧反弹效果
    

    21、UIScrollView内容向下偏移20问题处理,在控制器添加:

    self.automaticallyAdjustsScrollViewInsets = NO;
    if (@available(iOS 11.0, *)) {
        UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }
    

    22、获取项目中可使用字体:

    NSArray *fontFamilies = [UIFont familyNames];
    for (int i = 0; i < [fontFamilies count]; i++)
    {
        NSString *fontFamily = [fontFamilies objectAtIndex:i];
        NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
        NSLog (@"所有字体 == %@: %@", fontFamily, fontNames);
    }
    

    23、Xcode系统配置包路径:

    快捷键:shift+command+G
    路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
    

    24、mac上需要开启允许任何来源,来运行第三方下载的软件。
    解决方法:打开终端,然后输入以下命令:

    sudo spctl --master-disable 
    

    25、实现模糊效果:

    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"found"]];
    UIVisualEffectView * visualView = [[UIVisualEffectView alloc]init];
    visualView.frame = self.view.bounds;
    visualView.effect = nil;
    [self.view addSubview:visualView];
    [UIView animateWithDuration:3 delay:1 options:UIViewAnimationOptionRepeat animations:^{
        visualView.effect = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]].effect;
    } completion:^(BOOL finished) {
            
    }];
    

    26、打印地址:%p

    NSMutableString * tempMStr = [[NSMutableString alloc]initWithString:@"strValue"];
    NSLog(@"tempMStr值地址:%p,tempMStr值%@,tempMStr值引用计数%@", tempMStr,tempMStr,[tempMStr valueForKey:@"retainCount"]);
    

    打印方法名:

    NSLog(@"--- %s ---",__func__);//__func__打印方法名
    

    27、单例:

    + (instancetype) instance {
        static trHttpClient *_instance = nil;
        static dispatch_once_t trHttpClientPredicate;
        dispatch_once(&trHttpClientPredicate, ^{
            _instance = [[self alloc] initSingleton];
        });
        return _instance;
    }
    

    28、两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。
    在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。

    @property (nonatomic, copy, nonnull) NSArray * items;
    @property (nonatomic, copy) NSArray * __nonnull items;
    

    29、&和&&
    &:不管前面的条件是否正确,后面都执行。
    &&:前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。


    30、GitHub的README.md 图片:

    ![水波浪加载动画](https://github.com/wuyukobe24/WaveLoadAnimation/blob/master/水波浪.gif)
    

    简书图片:

    ![图片名](http://img5.imgtn.bdimg.com/it/u=3300305952,1328708913&fm=26&gp=0.jpg) 
    

    文字链接:

    [简书](http://jianshu.io)
    

    网址链接:

    <http://example.com/>
    

    31、比较:

    char   字符      字节2 位数16  数值范围:0 〜 2x10^6-1
    int    整型      字节4 位数32  数值范围: -2147483648〜+2147483647  有效数位 10 
    long   长整型    字节8 位数64   数值范围 -2^63〜2^63 - 1
    float  单精度浮点 字节4 位数32   数值范围 -3.4×10^-38〜3.4×10^38    有效数位 6~7    小数点后一位
    double 双精度浮点 字节8 位数64   数值范围 -1.7×10^-308〜1.7×10^308  有效数位 6~7    小数点后两位
    

    32、iOS设备:

    iPhone各机型尺寸:
    机型          屏幕尺寸 屏幕宽高(像素)   屏幕宽高(点)  模式
    iPhone 3GS   3.5    320 x 480       320 x 480    1x
    iPhone 4S    3.5    640 x 960       320 x 480    2x
    iPhone 5SE   4      640 x 1136      320 x 568    2x
    iPhone 8     4.7    750 x 1334      375 x 667    2x
    iPhone 8 P   5.5    1242 x 2208     414 x 736    3x
    iPhone X     5.8    1125 × 2436     375 × 812    3x
    
    iPad各机型尺寸:
    1、9.7寸   (width = 1024, height = 768)
    2、10.5寸  (width = 1024, height = 768)
    3、11寸    (width = 1194, height = 834)
    4、12.9寸  (width = 1366, height = 1024)
    

    相关文章

      网友评论

        本文标题:iOS快捷小知识

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