在iOS开发上已经两年多了,前一阵子因为一些奇怪的需求踩过很多坑(可能是苹果的Bug,也可能是自己的水平不行)。现在闲点下来了,就将这些问题给记录下来,以后忘记的时候可以来翻一翻。
1.
CALayer的坐标系不同于UIView,是以它所在View上的bounds来进行坐标参考的,而不是它的SuperLayer。
2
我们经常会碰到一个需求,在一个UIButton里面图片在上文字在下。我的处理方法是通过获得图片以及文字的size来改变UIButton里面titleEdgeInsets
,imageEdgeInsets
两个属性的值使得改变图片以及文字的位置,
而title和image必须要调用一次方法才能获得他们的size(估计是因为内部使用了懒加载);
//必须要调用一次titleLabel和imageView才能获得它们的size
button.titleLabel.font = [UIFont systemFontOfSize:15.];
button.imageView.backgroundColor = button.backgroundColor;
CGSize titleSize = button.titleLabel.bounds.size;
CGSize imageSize = button.imageView.bounds.size;
CGFloat interval = 2.0;
[button setTitleEdgeInsets:UIEdgeInsetsMake(imageSize.height + interval, -(imageSize.width + interval), 0, 0)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0,0, titleSize.height + interval, -(titleSize.width + interval))];
3
通过方法- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
获得的UIImage,在使用NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality);
转换成NSData之后系统内存暴增,一张原图差不多能增加30-40兆的内存,在选择了多张图片之后很容易使系统崩溃。
解决方法就是通过- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler
这个方法来获取照片,先把NSData数据转换成UIImage,然后使用NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality)
,这样就不会出现上面说的那个问题了。
待续。。。