学习iOS也有一段时间了,感觉知之甚少。每天都有新的疑问提出,然后自己在网上慢慢的查阅答案。到现在也只是流于表面的学习,非常想学习语言中的设计模式和一些核心代码,可惜基础控件也得慢慢掌握。整理整理一些很杂的技术点吧。
1.Xcode升级到7后,从文件管理器中直接拖入库文件,如果选择引用选项则不会自动添加路径,需要自己在Library Search Path中主动添加。(Xcode6中会自动添加,希望在后面的版本会更新)
2.在storboard中添加的控件,在代码中不能像纯代码写界面那样直接改变frame(大小和位置信息),需要一些特殊方法来实现(网上有人说需要在viewDidLoad后延迟改变,目前还没试验),如果有人知道方法,可以告诉我下,学习学习。
3.在Storyboard中的UItextField里监视键盘出现,如果想改变某些控件位置的话(防止键盘遮挡文本框),使用UIKeyboardDidShowNotification通知或者UIKeyboardDidChangeFrameNotification,在这里面可以改变storyboard中的控件大小。都是要使用Did就是已经完成了那个动作,如果代码写界面的话,就不需要考虑这个了。
4.防止键盘遮挡的方法有上面说的一种,另外是1:在textFieldDidBeginEditing方法中改变整个view的大小,使文本框能上移到键盘上。然后在endEnditing方法中重新设置view的大小。2.在scrollView中添加各种控件,通过滑动来防止键盘遮挡。
5.以上要注意的还有在storyboard中添加那些需要viewController遵守协议的控件,一定不要忘记添加delegate和datasource。(UITextfield、UITableView、UISearchBar等等),千万不要忘记啊。(被坑了几次,还是用的少了)
6.编译boost库时,在Xcode7中可以直接使用那些通过bootsrtap.sh脚本编译后的静态库文件(网上编译方法有很多,不一定需要这个编译),编译好后使用otool -lv 库名字命令来查看库的一些信息,如果没有LC_VERSION_MIN_IPHONEOS的话,模拟器会提示libboost_system.a(error_code.o), building for iOS simulator, but linking in object file built for OSX, for architecture x86_64类似这个信息,需要在编译时添加-miphoneos-version-min=7.0这个选项,后面7.0数字是自己设置,支持什么最低版本,就设置那个。编译脚本请参考boost全平台编译方法,在4楼回复有信息,非常感谢这位博主的帮助。(这个也不知道是不是Xocde7的bug, 更新Xcode7.1后,已经不需要添加那个选项,根据链接中的脚本直接编译)
7.在Xcode中通过size class和autoLayout相互配合来使用不同屏幕之间的适配。注意,如果开发的只是iPhone设备(举例),在size class中设置不同屏幕尺寸的时候,就算给iPad屏幕尺寸专门设置了约束,打开iPad模拟器还是显示的是iPhone屏幕的约束(可能例子举的不是太恰当,因为不会有人知道是iPone设备还去给iPad设置约束)。我是在学习size class时发现了这个问题,当时以为是Xcode有问题呢,为什么iPad还是显示的iPhone页面布局,最后发现我的项目不是通用的,只是针对iPhone(对一开始的学习来说也是个坑啊,需要注意)。size class的学习,博客里有一篇非常不错的,可惜是在公司的书签里保存着,没有同步,不然可以分享,大家也可以自己搜索。
8.添加约束的时候需要注意,有些控件是有固有大小的(固定的宽度或者高度),如日期选择器、滑块、进度条、活动指示器视图、分段控件和开发等。或者像UILabel、UIButton等控件的固有尺寸会根据内容大小而变化。
9.在更新tableview等用到复用的控件的数据时,最好是在每次数据变化时,根据数据中的属性来设置控件的一些变化,因为数据才是改变视图的正主。(比如说下拉列表最左边的小箭头,在每次重用的时候(或者说是重新加载数据,或者reloadData等)都应该判断箭头方向)
10.在实现collectionView的瀑布流布局(书上说是石工布局)时,需要用到UICollectionViewLayout子类。需要实现1. -(void) prepareLayout;2.- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect ;3.-(CGSize) collectionViewContentSize 这三个方法,具体的宽高大小,自己计算。实现封面浏览布局时,需要实现前两个方法,同时会用到3d变换效果(CATransform3D),要注意改变滑动方向,左右滑动而不是上下。
11.一般,将插座变量声明为弱引用是一种编程约定,当系统可用内存偏少时,视图控制器会释放视图,待需要时再创建,此时声明为weak,避免了强引用循环。但是,当插座变量指向顶层对象时,比如说xiib中的view,此时因声明为strong, 指向顶层对象的子视图时,声明为weak.
以上是最近学习iOS的一些杂项知识点,记录下来,以后也可以快速复习。继续走在编程的路上,逐渐积累知识。 晚上灯坏了,就着电脑的光打的字,可能会有错别字,见谅。