[swift] 이미지 슬라이드쇼에서 이미지 흑백/컬러 변경하기
이미지 슬라이드쇼에는 이미지를 흑백으로 변경하거나 원래 컬러로 복원하는 기능을 추가할 수 있습니다. 사용자가 이미지를 클릭하면 이미지의 효과를 변경할 수 있도록 해 보겠습니다.
1. 이미지 효과 변경을 위한 뷰 작성
처음으로 슬라이드에 사용되는 이미지를 표시할 뷰를 작성해야 합니다. 이 뷰에는 이미지를 효과적으로 표시하고 터치로 이미지 효과를 변경할 수 있는 기능이 있어야 합니다.
import UIKit
class ImageSliderView: UIImageView {
private var isGrayscale = false
override func awakeFromNib() {
super.awakeFromNib()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
self.addGestureRecognizer(tapGesture)
self.isUserInteractionEnabled = true
self.contentMode = .scaleAspectFit
}
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
isGrayscale = !isGrayscale
if isGrayscale {
self.image = self.image?.covertedToGrayScale()
} else {
self.image = self.image?.convertToOriginalColor()
}
}
}
extension UIImage {
func covertedToGrayScale() -> UIImage? {
let imageRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
let colorSpace = CGColorSpaceCreateDeviceGray()
let context = CGContext(data: nil, width: Int(self.size.width), height: Int(self.size.height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: CGImageAlphaInfo.none.rawValue)
context?.draw(self.cgImage!, in: imageRect)
let grayImage = context?.makeImage().flatMap { UIImage(cgImage: $0) }
return grayImage
}
func convertToOriginalColor() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
self.draw(in: CGRect(origin: .zero, size: self.size))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return colorImage
}
}
2. 이미지 슬라이드쇼에 ImageSliderView 추가
이미지 슬라이드쇼에 이전 단계에서 작성한 ImageSliderView를 추가해야 합니다. 슬라이드쇼에는 여러 이미지가 있을 수 있으므로, ImageSliderView를 반복해서 생성해서 슬라이드쇼에 추가합니다.
import UIKit
class ImageSliderViewController: UIViewController {
private var imageSliderViews: [ImageSliderView] = []
private var currentImageIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
// 슬라이드쇼에 사용될 이미지들
let images: [UIImage] = [
UIImage(named: "image1")!,
UIImage(named: "image2")!,
UIImage(named: "image3")!
]
// 슬라이드쇼에 ImageSliderView 추가
for image in images {
let imageSliderView = ImageSliderView(image: image)
imageSliderViews.append(imageSliderView)
}
// 첫 번째 이미지 표시
showImage(at: currentImageIndex)
}
private func showImage(at index: Int) {
// 이미지 슬라이드쇼에서 현재 이미지를 표시하기 위해 이전에 보여졌던 이미지를 제거
for view in self.view.subviews where view is ImageSliderView {
view.removeFromSuperview()
}
// 현재 이미지를 슬라이드쇼의 가운데에 표시
let imageSliderView = imageSliderViews[index]
imageSliderView.center = self.view.center
self.view.addSubview(imageSliderView)
}
}
3. 실행하여 흑백/컬러 변경 확인
이제 앱을 실행하고 이미지 슬라이드쇼를 터치하여 이미지의 효과를 변경할 수 있습니다. 이미지를 터치할 때마다 이미지가 흑백 또는 컬러로 변경되는 것을 확인할 수 있습니다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let imageSliderViewController = ImageSliderViewController()
self.addChildViewController(imageSliderViewController)
self.view.addSubview(imageSliderViewController.view)
imageSliderViewController.didMove(toParentViewController: self)
}
}
이제 ViewController
를 실행하면 이미지 슬라이드쇼에서 이미지를 터치하여 흑백 또는 컬러로 변경할 수 있습니다.
이미지 흑백/컬러 변경을 위한 코드 예를 참고해 주세요. 이 코드는 안내 용도로 작성된 것이므로 실제 앱에서 사용할 때에는 필요한 기능을 추가하거나 수정할 수 있습니다.
참고문서: