这是本人在开发中简单整理的iOS笔记,有点凌乱吧 哈哈。不过内容简单易懂 希望你能喜欢。
1.UIView不接收触摸事件的情况
> 设置了不接收用户交互userinteraenabled = NO(提醒:UIImageView默认userinteraenabled = NO,当然它的子控件也是不能接收到触摸事件的
)
> 隐藏hidden = YES
> 设置了透明度alpha = 0.0 ~ 0.0.1
> 子视图的位置超出了父视图的有效范围,子视图无法交互设置了
2、响应者链的事件的事件传递过程
> 如果view的根控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它 的父视图
> 在视图层次结构的最顶级视图,如果它也不能接收到事件或者消息,则将其事件传递给window对象处理
> 如果连window对象也不能处理,则将其事件或消息传递给application对象
> 如果application也不能处理该事或者消息,则将其丢弃
3、segue的类型
storyboard上每一根用来界面跳转的线,都是一个segue对象 它可以分为两种类型的segue
> 自动型:触摸某一控件,它会自动执行segue,界面自动完成跳转
> 手动型:需要手动执行segue 界面才会跳转
如果有两条执行的segue的话,我们需要为两条segue做标记 方法如下:
[self performSegueWithIdentifier:@“fromTo" sender:参数];
这个方法必须在执行必须在源控制器中执行。
调用sourceViewController的下面方法,做一些跳转前的准备工作并且创建好的segue对象- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:参数
这个sender就是当初performSegueWithIdentifier中传的sender
4、UITabBarController添加子控制器的两种方法
> 添加单个子控制器 [self addChildViewController:(UIViewController *)childViewController]
> 设置UITabBarController的数组属性 @property (nonatomic, copy) NSArray *viewControllers
5、切换控制器的显示方式
我们会想到navigationcontroller的push之外 还有另外一种切换控制器的方法 那就是Modal,基本上所有的控制器都能用该方法。它会以一种 从底部往上钻的效果,然后盖在之前的控制器。-
显示控制器: (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
销毁控制器:- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
6、UIView和CALayer该怎么做选择
我们知道UILayer能跟UIImageView实现一样的效果,既然一样,那在开发当中 我们有些时候在如何做选择呢 ?? 其实view多了一个事件处理的功能,也就是说,layer不能处理用户的触摸事件,而View能实现触摸的功能。总结需要用户交互用View;不需要用户交互 两者都可以。另外layer的性能会高点,毕竟人家少了事件处理的功能,相对view来说 比较轻量级。哈
7、隐式动画
手动创建的layer对象 都存在隐式动画(非根层)
8、发布应用的时候,一次性将NSLog语句移除。
#ifdef DEBUG
#define JHLog(...) NSLog(__VA_ARGS__)
#else
#define JHLog(...)
#endif
9、报错"_u_errorName", referenced from:
_rkl_NSExceptionForRegex in RegexKitLite.o
_rkl_makeNSError in RegexKitLite.o
_rkl_userInfoDictionary in RegexKitLite.o
需要在frameworks中导入libicucore.dylib库。
10、Xcode加载图片的时候只能用png
虽说xcode能看到JPG的图片,在有些时候会加载不成功 会提示:Cannot find executable for CFBundle 0x8c6a610 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/AccessibilityBundles/CertUIFramework.axbundle> (not loaded)
所以必须使用png的图片。但是你真的要使用JPG,就只能在添加后缀名了
如:self.imageView.image = [UIImage imageNamed:@"jj.jpg”];
11、UITabBarController的title设置
在VC中设置self.title,会导致navigation的title和tabbar的title一起被修改。
而设置导航栏的title属性时,需要用self.navigationItem.title 设置
12、清除图片缓存
当我们用SDWebImage进行图片的显示和缓存的时候,缓存的内存会累积,达到了一定程度的时候,我们就有必要进行清除缓存了。我们得清理内存和硬盘。
清除内存:
[[SDImageCache sharedImageCache] clearMemory];
清除硬盘:
[[SDImageCache sharedImageCache] cleanDiskWithCompletionBlock:<#^(void)completionBlock#>]
13、判断图片是否成功保存到相册中
当我们想保存照片到系统相册的时候,不知道它是否保存成功了没.因此得提示用户。 UIImageWriteToSavedPhotosAlbum(newImage, self, @selector(), nil);
我们不知道selector该写什么最好,我觉得还是按系统提供来比较好。请在该方法按住option键 会看到系统的方法,建议还是使用它比较好- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
14、通知和代理的区别
相同点:都能实现对象之间的信息传递。
不同点:代理是一对一的对应关系(就是单纯的代理方跟委托方的关系); 而通知是多对多的关系(一个对象能通知多个对象发生什么事,一个对象能知道多个对象发生了什么事)。
15、UIScrollView的代理实现放大缩小的主要方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 而指定视图的具体实现由scrollview完成。by the way 也可以设置scrollview的最大/最小缩放比例maximumZoomScale/minimumZoomScale
如果有什么好的建议,请联系虾米,虾米感激不尽 蟹蟹 哈!!
虾米联系方式:
QQ:584837022
github:https://github.com/ios-cjh