拍摄快照 - 只是UIView的一部分,而不是整个画面

时间:2014-12-23 18:34:41

标签: ios objective-c iphone uiview

我可以毫无问题地拍摄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。

3 个答案:

答案 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);

此代码裁剪特定图像的一部分......希望这对您有所帮助..