Tôi cần chụp lại UIView và tất cả các bản xem phụ của nó thành UIImage. Vấn đề là một phần của xem là tắt màn hình, vì vậy tôi không thể sử dụng chức năng chụp màn hình, và khi tôi cố gắng sử dụng chức năng UIGraphicsGetImageFromCurrentImageContext(), nó dường như không nắm bắt các subviews là tốt. Nếu nó được chụp các cuộc phỏng vấn và tôi chỉ làm điều gì đó sai? Nếu không, có cách nào khác để hoàn thành việc này không?Cần chụp UIView thành UIImage, bao gồm tất cả các bản xem trước
Trả lời
Bạn có nghĩa là
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer drawInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
không hoạt động? Tôi chắc rằng nó nên ...
Đó là cách đúng đắn để đi:
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Phương pháp này là một phương pháp mở rộng cho lớp UIImage, và nó cũng sẽ chăm sóc làm cho ngoại hình ảnh tốt trên mọi thiết bị có độ phân giải cao trong tương lai.
Thực sự hoạt động !!! – AlexeyVMP
Đã lưu thời gian của tôi :) Cảm ơn –
Dưới đây là một phiên bản 2.x Swift rằng nên làm việc nếu bạn lần đầu tiên tạo ra một mảng của UIViews để làm phẳng:
// Flattens <allViews> into single UIImage
func flattenViews(allViews: [UIView]) -> UIImage? {
// Return nil if <allViews> empty
if (allViews.isEmpty) {
return nil
}
// If here, compose image out of views in <allViews>
// Create graphics context
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, CGInterpolationQuality.High)
// Draw each view into context
for curView in allViews {
curView.drawViewHierarchyInRect(curView.frame, afterScreenUpdates: false)
}
// Extract image & end context
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Return image
return image
}
- 1. Capture UIImage của UIView bao gồm UINavigationBar
- 2. Có phát hành một bản phát hành UIView tất cả các bản xem trước của nó?
- 3. Chụp UIView dưới dạng UIImage
- 4. Thêm UIView trên tất cả các chế độ xem khác, bao gồm StatusBar
- 5. Cách tắt trợ năng cho chế độ xem bao gồm tất cả các bản xem trước của nó?
- 6. iOS làm động một chế độ xem bao gồm các bản xem trước
- 7. Bao gồm tất cả các phụ thuộc
- 8. Xóa tất cả các bản xem trước khỏi UIScrollView?
- 9. Tạo UIView chụp các vòi nhưng minh bạch đối với tất cả các cử chỉ khác
- 10. Monotouch: Xóa tất cả các bản xem trước khỏi một chế độ xem
- 11. Trả về tất cả các giá trị bao gồm NULL
- 12. Android.mk, bao gồm tất cả các tệp cpp
- 13. Lặp lại tất cả các bản xem trước của một loại cụ thể
- 14. Chụp AVFoundation UIImage
- 15. Lặp qua tất cả các bản xem trước của chế độ xem Android?
- 16. Chụp tất cả các Tin nhắn Windows
- 17. g ++ bao gồm tất cả/usr/include đệ quy
- 18. tìm tất cả văn bản trước khi sử dụng regex
- 19. không bao gồm các tập tin cần thiết vào omimompletion
- 20. iOS kiểm soát hành vi UIView alpha cho các bản xem trước
- 21. khối hoàn thành của uiview animate không bao giờ được gọi nếu xem biến mất
- 22. tìm thấy tất cả các chức năng (bao gồm cả tư nhân) trong một gói
- 23. Rails 3.1 biên dịch tài sản - bao gồm tất cả các tập tin javascript
- 24. UIViewController vs. UIView - cái nào sẽ tạo các bản xem trước?
- 25. Làm cách nào để sử dụng HTML5 trong tất cả các trình duyệt bao gồm IE7,8?
- 26. Xóa bóng khỏi các bản xem trước
- 27. Phản ánh trên tất cả các thuộc tính của giao diện, bao gồm cả các thuộc tính được kế thừa?
- 28. Nhận sự kiện hashchange để làm việc trong tất cả các trình duyệt (bao gồm IE7)
- 29. UIImage từ một khu vực của UIView
- 30. Cách tạo UIView có thể bao gồm thanh điều hướng?
tôi đoán rằng bởi vì mỗi 'UIView' là layer-based gọi '- [CALayer drawInContext: viewContext] 'có thể giúp. –