Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> iOS

Cách chụp màn hình (screenshot) lập trình trên iOS

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.

Cách chụp màn hình (screenshot) lập trình trên iOS

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:

Cách chụp màn hình (screenshot) lập trình trên iOS

Giải thích quy trình

  1. UIGraphicsBeginImageContextWithOptions: Tạo bitmap context với kích thước, trong suốt (opaque), scale màn hình.
  2. view.layer.render(in:): Vẽ toàn bộ cây layer của view vào context.
  3. UIGraphicsGetImageFromCurrentImageContext(): Tạo UIImage từ context.
  4. 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.layer bằng specificView.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)
}