【问题标题】:How to take screenshot of expandable uitableview programmatically如何以编程方式截取可扩展的uitableview的屏幕截图
【发布时间】:2012-09-10 08:09:29
【问题描述】:

我尝试截取可扩展的 uitableview 的屏幕截图,我尝试截取 uitableview 的屏幕截图但我无法做到,然后我将 tableview 框架大小更改为 tableview 内容大小。截屏后,我将帧大小更改为旧帧大小。现在的问题是我在表格视图中有可扩展部分。我可以在我的屏幕截图中截取未展开的表格视图单元格的屏幕截图。我还需要截取未展开的表格视图单元格内容的屏幕截图。

【问题讨论】:

    标签: ios iphone uitableview ipad


    【解决方案1】:

    通过使用此类别文件,您可以截取屏幕上可见的屏幕截图....

      @interface UIImage (MyImage)
    
    
        + (UIImage*)imageFromView:(UIView*)view;
        + (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize;
        + (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize;
        + (void)beginImageContextWithSize:(CGSize)size;
        + (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds;
        @end
    
    #import "UIImage+MyImage.h"
    
    @implementation UIImage (MyImage)
    
    + (void)beginImageContextWithSize:(CGSize)size
    {
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
            if ([[UIScreen mainScreen] scale] == 2.0) {
                UIGraphicsBeginImageContextWithOptions(size, YES, 2.0);
            } else {
                UIGraphicsBeginImageContext(size);
            }
        } else {
            UIGraphicsBeginImageContext(size);
        }
    }
    
    + (void)endImageContext
    {
        UIGraphicsEndImageContext();
    }
    
    + (UIImage*)imageFromView:(UIView*)view
    {
        [self beginImageContextWithSize:[view bounds].size];
        BOOL hidden = [view isHidden];
        [view setHidden:NO];
        [[view layer] renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        [self endImageContext];
        [view setHidden:hidden];
        return image;
    }
    
    + (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize
    {
        UIImage *image = [self imageFromView:view];
        if ([view bounds].size.width != newSize.width ||
            [view bounds].size.height != newSize.height) {
            image = [self imageWithImage:image scaledToSize:newSize];
        }
        return image;
    }
    
    + (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
    {
        [self beginImageContextWithSize:newSize];
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        [self endImageContext];
        return newImage;
    }
    
    
    + (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds {
        CGImageRef imageRef = CGImageCreateWithImageInRect(myImage.CGImage, bounds);
        UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
        CGImageRelease(imageRef);
        CGSize asd =  croppedImage.size;
        return croppedImage;
    }
    
    @end
    

    方法调用将是....

     yourImageView.image= [UIImage imageFromView:(UIView*)yourTableViewInstance ]
    

    试试这个....

    【讨论】:

    • 我也厌倦了用不同的方法来解决这个问题。在截屏时,我展开了表格视图中的所有部分。我使用表格视图的内容大小来截屏。它对我来说很好..
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多