如何在特定帧中捕获UIView作为UIImage?

时间:2014-03-25 05:17:39

标签: objective-c uitableview uiimage quartz-2d

您好我想将我的UIView转换为UIImage特定的帧尺寸,请帮助我。

  1. 我有' UITableView`,它被添加为' UIScrollView'的子视图。对于水平滚动,我的表格视图框架大小为(0,0,12000,768)。

  2. 我希望在滚动后将UITableView的当前可见内容转换为UIImage

  3. 示例:

    如果我水平滚动我的表视图一段距离意味着当前可见的是(150,0,1200,768),这意味着完整的设备屏幕。

    1. 如果我使用以下代码:

      UIGraphicsBeginImageContext(self.frame.size);
      [self.layer renderInContext:UIGraphicsGetCurrentContext()];
      UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
      

      它的捕获总是只有(0,0,1200,768)的帧大小。

    2. 那么,我该如何设置图像捕捉的来源。

      请帮助我....提前致谢....

3 个答案:

答案 0 :(得分:4)

- (UIImage *)rasterizedImageInView:(UIView *)view atRect:(CGRect)rect {
    UIGraphicsBeginImageContextWithOptions(rect.size, view.opaque, 0.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y);
    [view.layer renderInContext:context];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

这样,您就可以按UIImage定义的UIView内的特定区域捕获CGRect

答案 1 :(得分:0)

CGRect rect = [self.view bounds];

UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];   
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

答案 2 :(得分:-1)

试试这个。

UIView *viewprint=[[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
viewprint.backgroundColor=[UIColor whiteColor];
tableView.frame = CGRectMake(0, 0, width, height);
[viewprint addSubview:tableView];

UIGraphicsBeginImageContext(viewprint.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();