Giới thiệu
Bài viết này hướng dẫn chụp ảnh màn hình (screen capture) theo chương trình trong iOS và hiển thị ngay trong UIImageView.
Các bước thực hiện
Bước 1: Tạo dự án
Xcode → New Project → Single View Application → Tên "TakeScreenShot".
Bước 2: Thiết kế giao diện
Thêm 1 UITextField, 1 Button ("Chụp màn hình"), 1 UIImageView (hiển thị kết quả) lên Main.storyboard.

Bước 3: Kết nối IBOutlet & IBAction
@IBOutlet weak var snapShotImageView: UIImageView!
@IBAction func takeSnapShotClicked(_ sender: Any) { }
Bước 4: Cấu hình UIImageView trong viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// Viền đỏ để phân biệt vùng hiển thị screenshot
snapShotImageView.layer.borderColor = UIColor.red.cgColor
snapShotImageView.layer.borderWidth = 2.0
snapShotImageView.contentMode = .scaleAspectFit
}
Bước 5: Hàm chụp màn hình
@IBAction func takeSnapShotClicked(_ sender: Any) {
// 1. Bắt đầu context đồ họa với kích thước view hiện tại
UIGraphicsBeginImageContextWithOptions(view.layer.frame.size, false, UIScreen.main.scale)
// 2. Lấy context hiện tại
guard let context = UIGraphicsGetCurrentContext() else { return }
// 3. Render layer của view vào context
view.layer.render(in: context)
// 4. Lấy ảnh từ context
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
// 5. Kết thúc context
UIGraphicsEndImageContext()
// 6. Hiển thị lên UIImageView
snapShotImageView.image = screenshot
}
Bước 6: Chạy thử
Nhập text vào TextField → Bấm "Chụp màn hình" → Kết quả hiển thị trong ImageView dưới cùng:

Giải thích quy trình
UIGraphicsBeginImageContextWithOptions: Tạo bitmap context với kích thước, trong suốt (opaque), scale màn hình.view.layer.render(in:): Vẽ toàn bộ cây layer của view vào context.UIGraphicsGetImageFromCurrentImageContext(): Tạo UIImage từ context.UIGraphicsEndImageContext(): Giải phóng context.
Nâng cao: Lưu ảnh vào Photo Library
import Photos
func saveToPhotoLibrary(_ image: UIImage) {
PHPhotoLibrary.requestAuthorization { status in
guard status == .authorized else { return }
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image)
})
}
}
Lưu ý
- Cách này chụp **toàn bộ view controller** (kể cả status bar, navigation bar nếu có).
- Để chụp chỉ một view con: thay
view.layerbằngspecificView.layer. - Trên iOS 13+, có thể dùng
UIGraphicsImageRenderer(hiệu quả hơn):
let renderer = UIGraphicsImageRenderer(bounds: view.bounds)
let image = renderer.image { ctx in
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
}