2016-09-21 20 views
12

Câu hỏi đầu tiên của tôi ở đây :) Gần đây tôi cập nhật Xcode của mình lên 8 và phương pháp resizableSnapshotView không hoạt động đúng trên một số trình mô phỏng. SnapshotView hoạt động tốt trên tất cả các thiết bị thử nghiệm với iOS9/10 và các trình mô phỏng trong iPhone6, nhưng nó trống trên các trình mô phỏng iPhone7/7p. Tôi nghĩ rằng 7/7p có thể cần một số cơ quan chức năng để truy cập ảnh chụp nhanh, nhưng tôi không biết chúng là gì.SnapshotView trống trên iPhone 7/7plus

let cell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! CalendarCell  
var topFrame = cell.frame 
topFrame.origin.y = tableView.contentOffset.y 
topFrame.size.height -= tableView.contentOffset.y 
topSnapshotView = tableView.resizableSnapshotView(from: topFrame, afterScreenUpdates: false, withCapInsets: UIEdgeInsets.zero) 
+2

Tôi đang trải qua điều tương tự, tốt để nghe nó chỉ xảy ra trên Mô phỏng. – Alf

+0

Chính xác cùng một vấn đề, tuy nhiên tôi chưa thử nghiệm điều này trên các thiết bị thực chưa – KTZ

+0

Tới Alf. Thật không may, tôi không có thiết bị thực và tôi không chắc liệu điều này có xảy ra trên các thiết bị thực hay không. – LYM

Trả lời

7

Sử dụng phần mở rộng UIView sau để tạo ảnh chụp nhanh bằng CoreGraphics.

Tôi có thể xác nhận điều này hoạt động trên trình mô phỏng iPhone 7.

public extension UIView { 

    public func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) 
     drawHierarchy(in: bounds, afterScreenUpdates: false) 
     let snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return snapshotImage 
    } 

    public func snapshotView() -> UIView? { 
     if let snapshotImage = snapshotImage() { 
      return UIImageView(image: snapshotImage) 
     } else { 
      return nil 
     } 
    } 
} 
+0

Cảm ơn bạn, hoạt động. Tuy nhiên, vấn đề chính của tôi là sử dụng 'resizableSnapshotView' chức năng này. Tôi đã thử một số thời gian để viết lại nó với mã của bạn nhưng không thành công. Bạn có thể chỉ cho tôi cách để cắt snapshotView với một khung. – LYM

+2

Điều này không hoạt động. Nó tạo ra kết quả tương tự cho tôi như các phương pháp cũ. Đã thử nó với Xcode 8 và iPhone 7/7 + giả lập. – yuzer

+0

Bất cứ ai biết tại sao điều này xảy ra? –

0

trình tại:

  • Version 8.1 (8B62)
  • Simulator Version 10.0 (SimulatorApp-700,14

Swift 3

import Foundation 
import UIKit 

extension UIView { 
    func snapshotView() -> UIView? { 
     guard let image = snapshotImage() else { return nil } 
     return UIImageView(image: image) 
    } 

    func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, contentScaleFactor) 
     defer { UIGraphicsEndImageContext() } 

     drawHierarchy(in: bounds, afterScreenUpdates: false) 

     return UIGraphicsGetImageFromCurrentImageContext() 
    } 
}