您的位置:首页 > 移动开发 > IOS开发

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:)];

有更多方法以后继续补充,这里可以根据自己需要进行选择,如果只是简单定制了返回按钮,第一种最简单,一句代码搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: