iOS

iOS快捷小知识

2019-06-28  本文已影响17人  wuyukobe
一些有关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)

上一篇下一篇

猜你喜欢

热点阅读