在UIGraphicsBeginImageContextWithOptions中的CGContextDrawImage上忽略了UIEdgeInsets
在绘制到屏幕外缓冲区时,我正在努力让Image Insets工作。
在UIImage上直接使用resizableImageWithCapInsets:setImage:进入一个按钮对我来说很好:
UIImage * base = [UIImage imageNamed:@"button.png"]; UIImage * img = [base resizableImageWithCapInsets:UIEdgeInsetsMake(20,20,20,20)]; [self setImage:img forState:UIControlStateNormal];
如下所示(左边是原始缩放,右边是使用insets缩放):
所以正确的一个很好 – 线条顶部/底部/左/右是相等的间隔。 到现在为止还挺好。
现在,如果我使用绘制的图像尝试相同的事情,然后将其捕获到屏幕外缓冲区,其中:
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://mans.apache.org/~dirkx/insetSample.zip上的完整function示例以及http://pastebin.com/rm8h6YFV上的密钥代码。
任何和所有建议赞赏。
DW
我猜想可伸缩的UIImages处理的级别比Quartz2D高,因此使用CGContextDrawImage
是行不通的。
您可以尝试使用-[UIImage drawInRect]
。 这将绘制到当前的UIGraphics上下文,这是您在代码段中创建的位图上下文。
相关的是:
[base drawInRect:CGRectMake(0,0,self.bounds.size.width, self.bounds.size.height)];
- 如何解决在VAFieldTest应用程序中发生的_CTServerConnectionRegisterForNotification崩溃
- 收到内存警告和应用程序崩溃
- 内存使用增长与CTFontCreateWithName和CTFramesetterRef
- 如何在iPhone屏幕中间显示活动指标?
- 从自定义单元格加载时如何调整单元格表格的高度?
- animationUITextField指示一个错误的密码
- 如何开发面部识别iPhone应用程序?
- 在UIDatepicker中以12和24小时格式显示时间,而不是基于设备设置的应用程序设置
- (viewConroller.view removeFromSuperview)线程:1 EXC_BAD_ACCESS(代码= 1,地址= 0x6000000008)