2013-09-03 29 views
11

Làm cách nào để chụp màn hình TẤT CẢ nội dung của tableView? (Tất cả các nội dung = có thể nhìn thấy được + KHÔNG vùng hiển thị)IOS SDK - làm thế nào để chụp màn hình nội dung của tableView?

Tôi cố gắng này:

UIGraphicsBeginImageContext(self.tableView.bounds.size); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 

nhưng nó không hoạt động, tôi có nghĩa là nó chụp màn hình chỉ hiển thị khu vực :(


tôi giải quyết nó :))

đây là mã :)

+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

Bạn cần nhận kích thước của chế độ xem cuộn kèm theo, vì vậy có thể sử dụng: '[(UIScrollView *) super contenSize]' thay vì 'self.tableView.bounds.size'? – trojanfoe

+1

Tôi không nghĩ rằng bạn có thể làm điều đó. UITableView tái sử dụng các ô, có nghĩa là, các ô hiện đang hiển thị, là các ô duy nhất hiện được thêm vào UITableView. Khi bạn cuộn một UITableView - hãy nói xuống - UITableView lấy ra các ô biến mất ở trên cùng, cấu hình lại chúng để nội dung mới có sẵn ở dưới cùng, và sau đó thêm chúng ở đó. Vì vậy nếu bạn có thể chụp ảnh màn hình của toàn bộ UITableView, bạn sẽ thấy, rằng nó sẽ chỉ có nội dung trong khu vực hiện có của UITableView, vì các ô không được hiển thị đơn giản là không tồn tại. – Trenskow

+0

@Trenskow Thực ra điều đó không thể như bạn đã nói. Chỉ cần một chút logic hơn một chút, và bạn có thể làm điều này :) –

Trả lời

4
+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

Bất kỳ mẹo nào để có được phân đoạn được chọn của uisegmentedcointrol xuất hiện chính xác? Ngay bây giờ, segmnent đã chọn không có văn bản trong đó. – P5ycH0

+0

Bạn có thể cho tôi biết bạn đang chuyển cho thuộc tính CGRect trong phương thức nào không? Trong trường hợp của tôi tôi đang đi qua khung tableview. Nhưng nó không hiển thị toàn bộ nội dung của tableview .. –

2

Bạn phải sử dụng contentSize.height để nhận được chiều cao của tableview

Hãy thử điều này

UIGraphicsBeginImageContext(self.tableView.contentSize.height); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 
+0

điều này cũng sẽ làm cho màn hình chỉ hiển thị vùng xem bảng. –

0

Vâng, bạn có thể làm điều này. Tôi không thể cung cấp mã làm việc cho những gì bạn muốn, tôi chỉ có thể hướng dẫn bạn cách thực hiện điều này. Trong vòng lặp, bạn phải làm cho tất cả các phần của bảng bằng cách thay đổi nó là contentOffset và đặt mỗi hình ảnh trong mảng. Sau khi bạn có tất cả các phần của khung nhìn bảng, bạn phải kết nối các phần của bảng vào một hình ảnh (vẽ từng hình ảnh trong cgimagecontext, hãy nhớ đặt kích thước chính xác cho hình ảnh kết quả). Đó là nó, nó không phải là khó :) Hy vọng điều này sẽ giúp, Chúc may mắn!

Các vấn đề liên quan