Mặc dù iOS không cung cấp cách chính thức để chụp màn hình thiết bị bằng code, nhưng iOS cung cấp cách chụp màn hình bằng nút Home + Power. Để chụp màn hình bằng code, chúng ta thực hiện các bước sau:
Các bước thực hiện
- Lấy layer của keyWindow:
UIApplication.shared.keyWindow!.layer - Lấy tỷ lệ màn hình:
UIScreen.main.scale - Tạo context hình ảnh mới với cùng kích thước view
- Render layer vào context và lưu thành UIImage
Ví dụ hoàn chỉnh
Tạo dự án mới, thêm màu nền cho ViewController, kéo một Button và kết nối action. Thêm code sau vào action:
@IBAction func takeshot(_ sender: Any) {
var image: UIImage?
let currentLayer = UIApplication.shared.keyWindow!.layer
let currentScale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(currentLayer.frame.size, false, currentScale)
guard let currentContext = UIGraphicsGetCurrentContext() else { return }
currentLayer.render(in: currentContext)
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let img = image else { return }
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil)
}
Cấu hình Info.plist
Thêm key NSPhotoLibraryAddUsageDescription vào Info.plist để xin quyền lưu ảnh.
Kết quả
Giao diện ứng dụng khi chạy:

Lần đầu chạy, nhấn nút chụp sẽ xin quyền truy cập Photos:

Sau khi cho phép, ảnh sẽ xuất hiện trong ứng dụng Photos:

Lưu ý: Code này chụp toàn bộ màn hình keyWindow. Nếu cần chụp một View cụ thể, hãy thay currentLayer bằng yourView.layer. Có thể chuyển hàm này thành extension của UIView để tái sử dụng.