2012-04-03 28 views
5

Tôi gặp vấn đề mà tôi không thể sửa được. Tôi đang cố gắng để có một màn hình-shot của một UIScrollView (bao gồm cả nội dung màn hình) nhưng khi xem là dài renderInContext không nhận được tất cả các nội dung của xem di chuyển. Kích thước hình ảnh được sản xuất là chính xác nhưng dữ liệu được hiển thị dường như bị thiếu các phần của màn hình để lại không gian màu trắng, nơi các khối đó nên. Các khối bị thiếu là từ nội dung trong một UIWebView, mà tôi tin là được đặt thành "scaleToFit". Nó không xảy ra mọi lúc, nó dường như chỉ xảy ra khi chiều cao của UIWebView nếu khá lớn. Mà làm cho tôi nghĩ là phải làm gì với việc mở rộng UIWebView.Làm thế nào để bạn sửa lỗi "khối" dữ liệu khi chụp ảnh màn hình trên thiết bị iOS?

Nếu tôi điều chỉnh coreLayer.bounds CGRECT bên dưới, tôi nhận được các kết quả khác nhau, đôi khi các khối bị thiếu ở dưới cùng và đôi khi chúng nằm ở giữa hình ảnh.

tôi bắt đầu với mã từ câu trả lời chấp nhận của question này và khi tôi nhận thấy vấn đề cắt, tôi đổi nó như sau:

UIGraphicsBeginImageContext(scrollView.contentSize); 
{ 
    CGPoint savedContentOffset = scrollView.contentOffset; 
    CGRect savedFrame = scrollView.frame; 


    //hide the scroll bars 
    [scrollView setShowsHorizontalScrollIndicator:NO]; 
    [scrollView setShowsVerticalScrollIndicator:NO]; 


    scrollView.contentOffset = CGPointZero; 
    scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height); 
    //adjust layer for cut-off 
    CALayer *coreLayer = scrollView.layer; 
    coreLayer.bounds = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height); 
    [coreLayer renderInContext: UIGraphicsGetCurrentContext()]; 
    //[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    scrollView.contentOffset = savedContentOffset; 
    scrollView.frame = savedFrame; 


    //reset the scroll bars to default 
    [scrollView setShowsHorizontalScrollIndicator:YES]; 
    [scrollView setShowsVerticalScrollIndicator:YES]; 
} 
UIGraphicsEndImageContext(); 

Việc điều chỉnh cắt đã giúp (cố định nó với một số quan điểm) nhưng nó vẫn bị cắt khi UIScrollView khá dài. Tôi đã làm việc này một thời gian và dường như không thể tìm thấy một sửa chữa. Bạn có đề nghị nào không? Có ai từng gặp vấn đề này không?

Vui lòng trợ giúp!

+0

Chỉ là một suy nghĩ nhưng bạn đã xem xét tạm thời thay đổi scrollView.frame.size thành scrollView.contentSize? Điều này sẽ yêu cầu khung nhìn bảng để nạp tất cả các ô vào, khi chúng được lắp vào khung (bảng xem cache nội dung bên ngoài khung của chúng, không phải bên ngoài màn hình). – Kalle

Trả lời

0

Chế độ xem cuộn của bạn có chế độ xem bảng không? Nếu vậy, khá nhiều chỉ có nội dung trên màn hình thực sự tồn tại do tái sử dụng tế bào. Ngay cả khi đó là chế độ xem cuộn thông thường, thì điều đó là hợp lý khi hệ điều hành đang thực hiện tối ưu hóa bằng cách không hiển thị một số yếu tố ngoài màn hình của chế độ xem cuộn. Nếu đó là sự thật, bạn có thể làm cho điều này hoạt động bằng cách cuộn một lần theo chương trình một lần và hiển thị từng cái trong ngữ cảnh của bạn ở đúng vị trí.

+0

Yup, đó là chính xác những gì nó đang làm và tôi đã phải tìm ra bao nhiêu là thực sự trả lại. Những gì tôi thấy là thường có 3 "khối" có thể xem tại một thời điểm. Sau đó, khi bạn cuộn UIScrollView, những người này sẽ vẽ lại nội dung dựa trên hướng cuộn. Vì vậy, tôi đang chụp ảnh màn hình của khu vực 3 bảng điều khiển, cuộn nó đến 3 bảng điều khiển có thể xem tiếp theo, v.v. – thiesdiggity

+0

Tôi sẽ cảnh báo bạn để đảm bảo mã của bạn không có mã số 3 được mã hóa cứng. Số hàng được vẽ ngoài màn hình có thể là chi tiết triển khai có thể thay đổi với bản phát hành OS mới hoặc thậm chí khác trên thiết bị khác, tùy thuộc vào khả năng RAM hoặc GPU có sẵn. –

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