20170208
1,snapView = [_shadowView snapshotViewAfterScreenUpdates:NO];//获取view的快照,用于整体的拷贝动画,如tableView的cell的手势删除动画。
2,xib设置子视图与父视图的比例,除了高度设置还可以用bottom设置;
3,设置两个视图等高时,可以修改一个视图的高度等于另一个视图的宽度;
4,可以重复设置相同的约束,修改不同的条件,比如需求是要子视图按比例4:1显示,子视图款高都小于或等于父视图。此时就要设置两次子视图的宽高等于父视图,但第一次设置为<=,第二次设置的priority为750。这样就能保证子视图小于父视图,按比例显示后,宽的一边与父视图相同,窄的一边小于父视图。
5,两个imageView显示一张图片,用 imageView.layer.contentsRect = CGRectMake(0, 0, 1, 0.5);显示上半部分的图片,imageView.layer.contentsRect = CGRectMake(0, 0.5, 1, 0.5);显示下半部分的图片。
6,显示图片的制定范围。
CAShapeLayer *mask = [CAShapeLayer layer];
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(x, y, width, height)];
mask.path = bezierPath.CGPath;
imageView.layer.mask = mask;
7,应用相互启动,A_app设置URL schemes 为appA,B_app设置URL schemes为appB。同时A_app设置白名单LSApplicationQueriesSchemes数组元素appB。这样就能实现A_app启动B_app,功能实现后又在B_app中回调起A_app.
8,二维码扫描:
AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
ob j.type 二维码类型
二十位的条形码类型为:org.iso.Code128
十三位的条形码类型为:org.gs1.EAN-13
二维码:org.iso.QRCode
9,property中的copy如果string是不可变的那么不会copy不同地址的字符串,还是原来的地址;
如果是可变字符串,用copy则会生成新的字符串,但是如果重写setter方法是用的是_string = string则不会生成新的不可变字符串。
因此在重写copy属性的属性时,要用_property=[property copy];
10,NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass:%@",[UIButton class]];
NSArray *buttons = [self.view.subviews filteredArrayUsingPredicate:predicate];
通过谓词过滤指定条件的元素.
11,GCD的onceToken执行一次的任务是相对于类,不论是在类方法还是在实例方法中调用都是如此。另外设置的静态变量是相对于类的,如A类中设置一个静态变量static BOOL hasShow = NO,在一个实例a中设置了hasShow = YES,如果在另一个实例b中拿到hasShow依然是YES(b实例没有操作hasShow).
12,xib定义的view,在awakeFromNib中尺寸是1000的初始值,那么问题来了,要用自身的宽高做为参照时,在什么方法中获取才是真实的尺寸呢?答案是layoutSubViews,或者控制器中的viewDidLayoutSubviews方法中。有的说在view 的updateConstraints中,但是如果控制器中在updateViewConstraints里添加了约束,修改那么view 的updateConstraints方法已经执行过了,不会获取新的frame。当然也可以在drawRect方法中获取,如果在尺寸改变时需要重绘,可设置view.contentMode = UIViewContentModeRedraw;
13,创建同步的alert:在显示后调用CFRunLoopRun();在代理方法执行后调用CFRunLoopStop(CFRunLoopGetCurrent());----参考:http://blog.devtang.com/2012/06/24/enhance-uiactionsheet/
14,UIView 重写时,外部调用init初始化,会先调用initWithFrame:再调用init方法;再外部调用initWithFrame:初始化时只会调用initWithFrame:。
15,后台在上传图片时,是可以记录图片的大小的,方便以后做图文混排。对于已经上传的不知七牛是否有对应的方法获取图片宽高,或者比例等信息。
16,rightBarButtonItems 添加items时,@[item1,item2]。在导航栏上显示的是item2,item1。顺序是反的.
17,今天做一个商品列表编辑功能,列表上有一个输入框,在最后一个cell时,弹起的键盘会遮盖输入框,列表控制器又是通过addChildrenVC加入到父控制器中的。在键盘弹起的通知中无法获取第一响应者,这样只能把编辑的cell传出来,通过转化位置来做相应的滚动。(这样太过繁琐,以下是一个简便方法)
后来通过设置tableView的contentInset的方式很好的解决了这个问题,通过键盘弹起的通知的到需要滚动的高度,然后设置tableView的地步缩进,在键盘隐藏时恢复。这样完美解决了输入框被键盘遮挡的问题。
18,cocoapod私有库:
参考:http://www.jianshu.com/p/d6a592d6fced
在gitlab上创建了LXPodSpec仓库
1, pod repo add LXSpecs http://10.20.101.5/leix/LXPodSpec.git
执行后repos中多了LXSpecs文件夹(pod repo查看)
2,在桌面或文档中执行 pod lib create NCKFoundation(生成文件夹,包含demo,这个文件夹和远程code仓库匹配)
3,验证本地 pod lib lint --allow-warnings --verbose 本地验证成功
4,上传(pod lib create NCKFoundation创建的)工程文件到gitlab上的仓库中。并打tag与Specs文件中相同,修改source 为gitlab路径。
5,远程验证:pod spec lint --allow-warnings --verbose
6,pod repo push LXSpecs NCKFoundation.podspec --allow-warnings --verbose 本地文件夹和远程都有了NCKFoundation.podspec文件(注意pod中用了第三方,包含.a文件会报错:- ERROR | [iOS] Encountered an unknown error (The 'Pods' target has transitive dependencies that include static binaries: 需要添加参数--use-libraries)。
7,测试Example时要用pod installExample中的Podfile。
网友评论