iOS开发:开发中的一些小技巧
2016-04-02 14:12
591 查看
一、关于几个方法的巧用
//1.程序一启动的时候会把所有的类加载进内存
//加载类的时候调用,比main函数调用的还要早
+ (void)load;
//2.当第一次使用这个类或者子类的时候调用
//作用:初始化类。
+ (void)initialize;
/**3
* 只要一个类遵守了UIAppearance协议,就可以调用协议方法来改变默认外观。
* UIView及所有的控件都遵从UIAppearance协议。
*/
@protocol UIAppearance <NSObject>
//作用:改变遵从协议类的默认外观
+ (instancetype)appearance;
//举例:将UITabBarItem的外观进行了改变。
UITabBarItem* item = [UITabBarItemappearance];
NSMutableDictionary* att = [NSMutableDictionarydictionary];
att[NSForegroundColorAttributeName] = [UIColororangeColor];
[item setTitleTextAttributes:attforState:UIControlStateSelected];
//作用:改变指定类的默认外观。
+ (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass,
... NS_REQUIRES_NIL_TERMINATION
NS_DEPRECATED_IOS(5_0,
9_0, "Use +appearanceWhenContainedInInstancesOfClasses: instead")__TVOS_PROHIBITED;
//举例:只将self类下的UITabBarItem的外观进行了改变,而不影响其它类的UITabBarItem
//推荐使用这种方法,在多人开发中这种方法是比较严谨的。
UITabBarItem * item = [UITabBarItem appearanceWhenContainedIn:self, nil];
NSMutableDictionary* att = [NSMutableDictionary dictionary];
att[NSForegroundColorAttributeName] = [UIColor orangeColor];
[item setTitleTextAttributes:att forState:UIControlStateSelected];
二、在iOS开发中使图片显示原色的方法
1.在xcode中配置,如图:
2.通过代码实现:
- (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingModeNS_AVAILABLE_IOS(7_0);
三、关于id与instancetype区别
使用和都是在程序运行时,动态匹对象的。在一个方法需要返回对象时一般不写具体的类而是使用和,当子类继承父类时就可以动态匹配而不至于使程序崩溃。
id不可以调用点语法,但可以调用对象的set、get方法,而且是可以调用任何对象的set、get方法,当这个对象没有set、get方法时,编译器是不能帮我们检查错误。
instancetype是可以调用点语法的,而且当方法不存在时,编译器是可以帮助我们检查错误的。
四、给只读属性赋值的技巧
遇到这种情况有两种方法可以解决:
方法一:使用kvc
[selfsetValue:tabBarforKeyPath:@"tabBar"];
方法二:调用底层的消息机制
objc_msgSend(self,@selector(setTabBar:),tabBar);
两种方法的本质都是runtime机制,其实kvc执行时就是调用的方法二的方法,在xcode7之后苹果原则上是不推荐使用id objc_msgSend(idself,SEL
op, ...)方法的,需要在xcode中设置。方法如下:
五、设置根据设置Button大小的方法。
方法一:
拿到当前的背景图片,根据图片的大小设置Button的大小
self.pushButton.frame =CGRectMake(
btnX,
btnY,
self.pushButton.currentBackgroundImage.size.width,
self.pushButton.currentBackgroundImage.size.height
);
拿到当前设置的图片,根据图片的大小设置Button的大小
self.pushButton.frame =CGRectMake(
btnX,
btnX,
self.pushButton.currentImage.size.width,
self.pushButton.currentImage.size.height
);
方法二:sizeToFit:默认会根据按钮的背景图片或者image和文字计算出按钮的最合适的尺寸。
[self.pushButtonsizeToFit];
六、程序启动过程(先做简单介绍,后续追加)
1.程序一启动是先要进入main函数的,main函数是程序的默认入口。
int main(int argc,char * argv[]) {
@autoreleasepool {
returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegateclass]));
}
}
/*
在这个方法里主要完成以下事情
//1.
创建UIApplication对象
创建Appdelegate对象,并且成为UIApplication对象的代理属性。
开启主运行循环:目的让程序一直跑起来,监听用户操作和相应事件的调度。主运行循环一旦进入就会创建自动释放池。
加载info.plist文件,判断下info.plist文件里面指定的内容。
假如info.plist里指定了main.storyboard加载main.storyboard。
//2-1:指定了main.storyboard的情况
先初始化窗口UIWindow。
然后加载storyboard文件,创建箭头指定的控制器。
把新创建的控制器作为窗口的根控制器,让窗口实现。
类似下面的实现的代码:
//UIStoryboard* story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//[story instantiateInitialViewController];
启动完毕之后调用下面的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullableNSDictionary
*)launchOptions NS_AVAILABLE_IOS(3_0);
//2-2:没有指定main.storyboard的情况
启动完毕之后调用下面的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
需要在这个方法里指定窗口和窗口的根控制器。
*/
七、xcode中好用的插件
1.插件
对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master
提供快速创建自动注释:VVDocumenter-Xcode-master
查看xcode中已经安装的插件:使用Alcatraz,https://github.com/supermarin/Alcatraz;
2.使用介绍:
(1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示。
(2)VVDocumenter-Xcode-master能提供快速注释只要在需要进行注释的地方敲三个斜杠(即///),就能根据环境提供以下两种格式的注释。
(3)安装完成重启Xcode如果出现提示框,请选择Load Bundle;
进入Xcode,在Window-Package
Manager打开Alcatraz;
在Alcatraz页面选择installed就可以看到你安装的插件
也可以直接进入插件目录看:sudo open /Users/你的用户名/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
七、interactivePopGestureRecognizer
苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecognizer.enabled
= YES;
这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音。这个功能是好,但是经常我们会有需求定制返回按钮,如果手动定制了返回按钮,这个功能将会失效,也就是自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。解决方法找到两种
1.重新设置手势的delegate
self.navigationController.interactivePopGestureRecognizer.delegate
= (id)self;
2.当然你也可以自己响应这个手势的事件
[self.navigationController.interactivePopGestureRecognizer
addTarget:self action:@selector(handleGesture:)];
有更多方法以后继续补充,这里可以根据自己需要进行选择,如果只是简单定制了返回按钮,第一种最简单,一句代码搞定。
//1.程序一启动的时候会把所有的类加载进内存
//加载类的时候调用,比main函数调用的还要早
+ (void)load;
//2.当第一次使用这个类或者子类的时候调用
//作用:初始化类。
+ (void)initialize;
/**3
* 只要一个类遵守了UIAppearance协议,就可以调用协议方法来改变默认外观。
* UIView及所有的控件都遵从UIAppearance协议。
*/
@protocol UIAppearance <NSObject>
//作用:改变遵从协议类的默认外观
+ (instancetype)appearance;
//举例:将UITabBarItem的外观进行了改变。
UITabBarItem* item = [UITabBarItemappearance];
NSMutableDictionary* att = [NSMutableDictionarydictionary];
att[NSForegroundColorAttributeName] = [UIColororangeColor];
[item setTitleTextAttributes:attforState:UIControlStateSelected];
//作用:改变指定类的默认外观。
+ (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass,
... NS_REQUIRES_NIL_TERMINATION
NS_DEPRECATED_IOS(5_0,
9_0, "Use +appearanceWhenContainedInInstancesOfClasses: instead")__TVOS_PROHIBITED;
//举例:只将self类下的UITabBarItem的外观进行了改变,而不影响其它类的UITabBarItem
//推荐使用这种方法,在多人开发中这种方法是比较严谨的。
UITabBarItem * item = [UITabBarItem appearanceWhenContainedIn:self, nil];
NSMutableDictionary* att = [NSMutableDictionary dictionary];
att[NSForegroundColorAttributeName] = [UIColor orangeColor];
[item setTitleTextAttributes:att forState:UIControlStateSelected];
二、在iOS开发中使图片显示原色的方法
1.在xcode中配置,如图:
2.通过代码实现:
- (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingModeNS_AVAILABLE_IOS(7_0);
三、关于id与instancetype区别
使用和都是在程序运行时,动态匹对象的。在一个方法需要返回对象时一般不写具体的类而是使用和,当子类继承父类时就可以动态匹配而不至于使程序崩溃。
id不可以调用点语法,但可以调用对象的set、get方法,而且是可以调用任何对象的set、get方法,当这个对象没有set、get方法时,编译器是不能帮我们检查错误。
instancetype是可以调用点语法的,而且当方法不存在时,编译器是可以帮助我们检查错误的。
四、给只读属性赋值的技巧
遇到这种情况有两种方法可以解决:
方法一:使用kvc
[selfsetValue:tabBarforKeyPath:@"tabBar"];
方法二:调用底层的消息机制
objc_msgSend(self,@selector(setTabBar:),tabBar);
两种方法的本质都是runtime机制,其实kvc执行时就是调用的方法二的方法,在xcode7之后苹果原则上是不推荐使用id objc_msgSend(idself,SEL
op, ...)方法的,需要在xcode中设置。方法如下:
五、设置根据设置Button大小的方法。
方法一:
拿到当前的背景图片,根据图片的大小设置Button的大小
self.pushButton.frame =CGRectMake(
btnX,
btnY,
self.pushButton.currentBackgroundImage.size.width,
self.pushButton.currentBackgroundImage.size.height
);
拿到当前设置的图片,根据图片的大小设置Button的大小
self.pushButton.frame =CGRectMake(
btnX,
btnX,
self.pushButton.currentImage.size.width,
self.pushButton.currentImage.size.height
);
方法二:sizeToFit:默认会根据按钮的背景图片或者image和文字计算出按钮的最合适的尺寸。
[self.pushButtonsizeToFit];
六、程序启动过程(先做简单介绍,后续追加)
1.程序一启动是先要进入main函数的,main函数是程序的默认入口。
int main(int argc,char * argv[]) {
@autoreleasepool {
returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegateclass]));
}
}
/*
在这个方法里主要完成以下事情
//1.
创建UIApplication对象
创建Appdelegate对象,并且成为UIApplication对象的代理属性。
开启主运行循环:目的让程序一直跑起来,监听用户操作和相应事件的调度。主运行循环一旦进入就会创建自动释放池。
加载info.plist文件,判断下info.plist文件里面指定的内容。
假如info.plist里指定了main.storyboard加载main.storyboard。
//2-1:指定了main.storyboard的情况
先初始化窗口UIWindow。
然后加载storyboard文件,创建箭头指定的控制器。
把新创建的控制器作为窗口的根控制器,让窗口实现。
类似下面的实现的代码:
//UIStoryboard* story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//[story instantiateInitialViewController];
启动完毕之后调用下面的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullableNSDictionary
*)launchOptions NS_AVAILABLE_IOS(3_0);
//2-2:没有指定main.storyboard的情况
启动完毕之后调用下面的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
需要在这个方法里指定窗口和窗口的根控制器。
*/
七、xcode中好用的插件
1.插件
对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master
提供快速创建自动注释:VVDocumenter-Xcode-master
查看xcode中已经安装的插件:使用Alcatraz,https://github.com/supermarin/Alcatraz;
2.使用介绍:
(1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示。
(2)VVDocumenter-Xcode-master能提供快速注释只要在需要进行注释的地方敲三个斜杠(即///),就能根据环境提供以下两种格式的注释。
(3)安装完成重启Xcode如果出现提示框,请选择Load Bundle;
进入Xcode,在Window-Package
Manager打开Alcatraz;
在Alcatraz页面选择installed就可以看到你安装的插件
也可以直接进入插件目录看:sudo open /Users/你的用户名/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
七、interactivePopGestureRecognizer
苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecognizer.enabled
= YES;
这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音。这个功能是好,但是经常我们会有需求定制返回按钮,如果手动定制了返回按钮,这个功能将会失效,也就是自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。解决方法找到两种
1.重新设置手势的delegate
self.navigationController.interactivePopGestureRecognizer.delegate
= (id)self;
2.当然你也可以自己响应这个手势的事件
[self.navigationController.interactivePopGestureRecognizer
addTarget:self action:@selector(handleGesture:)];
有更多方法以后继续补充,这里可以根据自己需要进行选择,如果只是简单定制了返回按钮,第一种最简单,一句代码搞定。
相关文章推荐
- iOS获得设备型号
- 百度地图IOS 自定义图标气泡viewForAnnotation不调用
- iOS app 更多操作 代码(邮件、facebook、twitter等)
- 改IOS百度地图API用点生成线路、导航、自定义标注 2013年11月
- iOS使用FFmpeg 播放rtsp实时监控
- iOS的 MVC 模式的注意点
- iOS之手势滑动返回功能
- ios 文字变色
- iOS: twitter post简单程序
- iOS创建Framework
- IOS7 隐藏显示状态栏 (电池栏)
- 16.04.01
- iOS创建Framework(下)
- iOS下创建framewok(上)
- OC阅读笔记九:分类(下)
- iOS viewController 和 view 的创建消失生命周期总结
- Mac OS X 10.11 Cocoapods的安装
- iOS中的程序调试
- iOS之修改XCode新建文件自动生成注释
- IOS开发-OC学习-常用功能代码片段整理