[IOS] UIButton 안에 이미지의 비율을 유지하는 방법

UIButton 안에 이미지의 비율을 유지하는 방법은 다음과 같습니다:

  1. Aspect Fit 설정: UIButton의 이미지를 비율을 유지하면서 버튼의 크기에 맞추려면 UIButton의 contentMode 속성을 .scaleAspectFit으로 설정합니다. 이렇게 하면 이미지가 버튼 내부에 꽉 차면서도 비율이 유지됩니다.
button.imageView?.contentMode = .scaleAspectFit
  1. 이미지 크기 조정: 이미지를 버튼의 크기에 맞게 조정하여 비율을 유지할 수도 있습니다. 이 경우에는 이미지를 버튼의 크기에 맞게 스케일링한 후 설정해야 합니다.
let buttonWidth = button.frame.width
let buttonHeight = button.frame.height
let image = UIImage(named: "yourImageName")
let scaledImage = image?.scaledToFit(in: CGSize(width: buttonWidth, height: buttonHeight))
button.setImage(scaledImage, for: .normal)

위의 코드에서 scaledToFit(in:) 메서드는 이미지를 지정된 크기에 맞게 스케일링하는 역할을 합니다. 이 메서드는 아래에 구현된 extension을 사용합니다.

extension UIImage {
    func scaledToFit(in size: CGSize) -> UIImage? {
        let aspectRatio = self.size.width / self.size.height
        var newSize = size
        
        if aspectRatio > 1 {
            newSize.height = newSize.width / aspectRatio
        } else {
            newSize.width = newSize.height * aspectRatio
        }
        
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
        self.draw(in: CGRect(origin: .zero, size: newSize))
        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return scaledImage
    }
}

위의 방법을 사용하면 UIButton 안에 이미지를 비율을 유지하면서 적절하게 표시할 수 있습니다.