在绘制到屏幕外缓冲区时,我很难让 Image Insets 正常工作。
在 UIImage 上直接使用 resizableImageWithCapInsets: setImage: into a button 对我来说效果很好:
UIImage * base = [UIImage imageNamed:@"button.png"];
UIImage * img = [base resizableImageWithCapInsets:UIEdgeInsetsMake(20,20,20,20)];
[self setImage:img forState:UIControlStateNormal];
如下图(左边是原始缩放,右边是用插图缩放):
所以右边的很好 - 顶部/底部/左侧/右侧的线间距相等。到目前为止一切顺利。
现在,如果我尝试对绘制的图像进行完全相同的操作,然后使用以下命令捕获到屏幕外缓冲区:
UIImage * base = [UIImage imageNamed:@"button.png"];
base = [base resizableImageWithCapInsets:UIEdgeInsetsMake(20,20,20,20)];
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);
ctx = UIGraphicsGetCurrentContext();
CGContextDrawImage(ctx, CGRectMake(0,0,self.bounds.size.width,
self.bounds.size.height), [base CGImage]);
img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self setImage:img forState:UIControlStateNormal];
我在下面(同样左边是原始缩放,右边是带有插图):
.
所以这里似乎忽略了插图。
有人对这里出了什么问题有任何建议吗?功能齐全的示例位于 http://people.apache.org/~dirkx/insetSample.zip以及位于 http://pastebin.com/rm8h6YFV 的关键代码.
感谢任何和所有建议。
Dw
最佳答案
我猜测可伸缩 UIImages 的处理级别高于 Quartz2D,因此使用 CGContextDrawImage
将无法正常工作。
您可以尝试使用 -[UIImage drawInRect]
代替。这将绘制到当前 UIGraphics 上下文,这是您在代码片段中创建的位图上下文。
相关行是:
[base drawInRect:CGRectMake(0,0,self.bounds.size.width,
self.bounds.size.height)];
关于iphone - UIGraphicsBeginImageContextWithOptions 中的 CGContextDrawImage 忽略了 UIEdgeInsets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562742/