我可以毫无问题地拍摄UIView整个画面的快照。 参与其中会导致图像被挤压。
这是我的UIView类别方法:
- (UIImage *)snapshot:(CGRect)frame
{
UIGraphicsBeginImageContextWithOptions(frame.size, YES, [[UIScreen mainScreen] scale]);
[self drawViewHierarchyInRect:frame afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
这是对这种方法的调用:
UIImage *img = [self.view snapshot:bottomRectToSnap];
当bottomRectToSnap是视图的部分帧时。
注意:如果重要的话,UIView包含UITableView。
答案 0 :(得分:0)
您申请的代码很好。
需要添加一些逻辑,无论你需要捕捉什么部分,它应该在屏幕上可用并在捕捉时隐藏其余部分。
完成快照后,删除隐藏代码。因此它也不会影响查看界面。
答案 1 :(得分:0)
使用以下代码。
- (void)captureView:(UIView*)view withFrame:(CGRect)frame{
UIGraphicsBeginImageContext(self.view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect = frame;
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
CGImageRelease(imageRef);
}
答案 2 :(得分:0)
您可以添加此代码以拍摄特定部分的快照..
CGRect cropRect=CGRectMake(0, 0, 100, 100);
CGImageRef imageRef = CGImageCreateWithImageInRect([_galleryimageview.image CGImage], cropRect);
UIImage *cropedImage=[UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
此代码裁剪特定图像的一部分......希望这对您有所帮助..