我有一个UIView,UIViews作为子视图。这些子UIViews中的每一个都使用drawRect绘制图像,并且可以使用CALayer shadowOffset,shadowRadius,shadowOpacity创建阴影。
这一切都很棒,但我使用renderInContext拍摄了顶级UIView的缩略图。所有阴影都显示在距离UIView很远的地方。
这是正确的,因为阴影偏移,但我需要在renderInContext方法中使阴影偏移更小(或为零),因为缩略图上下文比UIView上下文小很多。
我可以将renderInContext渲染到一个大的上下文然后缩放,但是仪器显示大的上下文内存使用量在那么短的时间内跳跃3-4mb,内存很紧。
还有另一种方法可以达到这个目的吗?或者快速替代renderInContext方法来获取UIView层次结构的缩略图?
编辑: 我没有尝试使用CALayer shadowOffset,而是尝试在drawRect中使用CGContextSetShadowWithColor: - 这确实有效,但即使clipsToBounds设置为NO,也会剪切阴影。关于这种替代方案的任何想法?
感谢。
答案 0 :(得分:1)
这个答案解决了这个问题: Getting a resized screenshot from a UIView
我一直在使用:
thumbnailSize = CGSizeMake(PAGE_THUMB_HEIGHT, PAGE_THUMB_WIDTH);
UIGraphicsBeginImageContext(thumbnailSize);
CGContextScaleCTM(UIGraphicsGetCurrentContext(), thumbnailSize.width/viewToCapture.bounds.size.width, thumbnailSize.height/viewToCapture.bounds.size.height);
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *flattenedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是UIGraphicsBeginImageContextWithOptions修复了它:
CGSize thumbnailSize = CGSizeMake(PAGE_THUMB_WIDTH, PAGE_THUMB_HEIGHT);
CGFloat scaleX = thumbnailSize.width / viewToCapture.bounds.size.width;
CGFloat scaleY = thumbnailSize.height / viewToCapture.bounds.size.height;
UIGraphicsBeginImageContextWithOptions(viewToCapture.bounds.size, YES, scaleX > scaleY ? scaleY : scaleX);
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *flattenedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();