我知道如何将正常的UIView渲染为位图图像:
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *bitmapImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
问题在于,如果view
是UIImageView
,其中resizableImageWithCapInsets:
从bitmapImage
返回了可调整大小的图片,bitmapImage
就是这样的原始图像 - 未拉伸一个 - 而不是真正显示的拉伸图像。我可以通过view
和UIImageView
之间的大小差异轻松判断出来。所以我的问题是如何呈现由{{1}}显示的完整内容,其图像是拉伸的可调整大小的图像?
答案 0 :(得分:1)
所以,我尝试了这段代码:
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(-20, -20, -20, -20);
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
imageView.image = [[UIImage imageNamed:@"number1.png"] resizableImageWithCapInsets:edgeInsets];
[self.view addSubview:imageView];
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 0.0);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *bmImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentsPaths objectAtIndex:0];
[UIImagePNGRepresentation(bmImage) writeToFile:[documentsDir stringByAppendingString:@"num1.png"] atomically:YES];
得到了这个:
从此:
所以看起来代码的工作原理应该如此。
答案 1 :(得分:0)
我是个白痴!代码完美无缺。我只是把别的东西搞砸了。愚蠢的是我将代码放在我的UIView类的方法中,但我将方法命名为image
。它适用于一般UIView
,但由于UIImageView
有自己的image
方法,而UIImageView
是UIView
的子类,UIImageView
'当我试图获取位图图像时调用s image
方法。