https://developer.apple.com/documentation/uikit/uiimageview
"An object that displays a single image or a sequence of animated images in your interface."
인터페이스에서 단일 이미지 혹은 애니메이션 처리된 이미지의 연속을 표시하는 객체입니다.
@MainActor class UIImageView : UIView
이미지 뷰는 UIImage
객체를 사용해서 구체화될 수 있는 모든 이미지를 효율적으로 그려줄 수 있도록 해줍니다. 예를 들어 JEPG, PNG 파일 같은 많은 표준 이미지 파일의 컨텐츠를 표시하기 위해 UIImageView
클래스를 사용할 수 있습니다. 코드 작성 혹은 스토리보드 파일로 이미지 뷰를 설정할 수 있으며, 런타임에 표시하고 있는 이미지를 변경할 수도 있습니다. 애니메이션 처리된 이미지의 경우 애니메이션을 시작, 중지하기 위해 이 클래스의 메소드를 사용할 수도 있고, 다른 애니메이션 파라미터를 구체화할 수도 있습니다.
Figure 1 Image view
이미지 뷰는 이미지를 어떻게 표시할 것인지 결정하기 위해 contentMode
를 사용할 수 있고, 이미지 자체의 설정을 사용할 수 있습니다. 이미지 뷰의 차원에 정확하게 일치하는 차원을 갖는 이미지를 구체화하는 것이 최선이지만, 이미지 뷰는 전체 혹은 사용 가능한 공간의 부분을 채울 수 있도록 이미지를 스케일링할 수 있습니다. 이미지 뷰 자체의 크기를 변경하는 경우 필요에 따라 이미지를 자동으로 스케일링합니다.
캡 인셋이 없는 이미지의 경우 이미지의 표시는 이미지 뷰의 contentMode
속성에 의해 결정됩니다. UIView.ContentMode.scaleAspectFit
과 UIView.ContentMode.scaleAspectFill
모드는 이미지의 기존 aspect ratio를 유지하면서 공간에 맞추도록 하거나 채우기 위해 이미지를 스케일링합니다. UIView.ContentMode.scaleToFill
값은 이미지가 왜곡되서 나타날 수도 있는 채로 이미지의 기존 aspect ration에 관계없이 이미지를 스케일링합니다. 다른 컨텐트 모드는 스케일링 없이 이미지 뷰의 bounds 내에서 이미지를 적절하게 위치시킬 수 있도록 합니다.
캡 인셋을 갖는 크기 조절 가능한 이미지의 경우 인셋은 이미지의 최종 모양에 영향을 미칩니다. 구체적으로 캡 인셋은 이미지의 어떤 부분이 스케일링될 수 있는지와 어떤 방향으로 조정되어야 하는지를 결정합니다. UIImage
의 resizableImage(withCapInsets:resizingMode:)
메소드를 사용해 확장하는 크기 조절 가능한 이미지를 생성할 수 있습니다. 이 타입의 이미지를 사용할 때 이미지 뷰의 컨텐트 모드는 보통 UIView.ContentMode.scaleToFill
을 설정해서 이미지가 적합한 위치로 확장할 수 있도록 하고 이미지 뷰의 bounds를 채울 수 있도록 합니다.
이미지 준비에 대한 팁은 Debugging Issues with Your Image View를 보시기 바랍니다. 캡 인셋을 갖는 크기 조절 가능한 이미지에 대한 정보는 UIImage
를 보시기 바랍니다.
Debugging Issues with Your Image View는 이 글의 아래에 나옵니다.
UIImage
https://developer.apple.com/documentation/uikit/uiimage
https://velog.io/@panther222128/UIImage
이미지는 이미지 뷰의 백그라운드에 합성되며, 이후 윈도우의 나머지 부분에 합성됩니다. 이미지에서 모든 투명도는 이미지 뷰의 백그라운드가 투과되어 보일 수 있도록 합니다. 유사하게 이미지의 백그라운드에 있는 투명도는 이미지 뷰의 투명도 및 UIImage
객체의 투명도에 따라 달라집니다. 이미지 뷰와 이미지 모두 투명도를 갖는 경우 이미지 뷰는 두 가지를 조합하기 위한 알파 블렌딩을 사용합니다.
isOpaque
속성이 true
이면 이미지의 픽셀은 이미지 뷰의 백그라운드 색상의 상단에 합성되고, 이미지 뷰의 알파 속성은 무시됩니다.isOpaque
속성이 false
이면, 각 픽셀의 알파 값은 이미지 뷰의 알파 값에 곱해지며, 최종 값은 해당 픽셀에 대한 실제 투명도 값으 됩니다. 이미지가 알파 채널을 갖지 않으면 각 픽셀의 알파 값은 1.0으로 가정합니다.Important
이미지의 알파 채널과 opaque가 없는 이미지 뷰의 알파 채널을 합성하는 것은 연산에서 비용이 높습니다. 코어 애니메이션 그림자를 사용하는 경우 성능 영향을 더 커지며, 이는 그림자의 모양이 뷰의 컨텐츠에 기반하게 되고 동적으로 연산되어야 하기 때문입니다. 이미지의 알파 채널 혹은 이미지 뷰의 알파 채널을 사용하는 것이 의도적인 것이 아니라면 성능 향상을 위해isOpague
속성을true
로 설정하시기 바랍니다. 추가적인 최적화 팁은 Tips for Improving Performance를 보시기 바랍니다.
Tips for Improving Performance는 이 글의 아래에 나옵니다.
이미지 뷰는 애니메이션 처리된 이미지 시쿼스를 저장할 수 있고, 해당 시퀀스 전체 혹은 부분을 재생할 수 있습니다. UIImage
객체의 배열로 이미지 시퀀스를 구체화할 수 있으며, 이 시퀀스를 animationImages
속성에 할당할 수 있습니다. 한 번 할덩되면 애니메이션 타이밍 설정과 애니메이션 시작 및 중지를 위해 이 클래스의 메소드 및 속성을 사용할 수 있습니다.
Note
animatedImage(with:duration:)
메소드를 사용해서 개별 이미지의 시퀀스로부터 단일UIImage
객체를 구성할 수도 있습니다. 이렇게 하는 것은animationImages
속성에 개별 이미지를 할당했었던 것과 같은 결과를 보여줍니다.
애니메이션 처리된 이미지의 시퀀스를 표시할 때 아래 팁을 고려하시기 바랍니다.
이미지 뷰는 기본값으로 사용자 이벤트를 무시합니다. 인터페이스에서 시각적 컨텐트를 표시하기 위해 오직 이미지 뷰만을 사용하게 됩니다. 사용자 상호작용 역시 처리할 수 있는 이미지 뷰를 원한다면, isUserInteractionEnabled
속성 값을 true
로 변경해야 합니다. 이후 제스쳐 리코그나이저를 추가하거나 터치 이벤트 혹은 다른 사용자 이벤트에 응답하기 위한 이벤트 처리 테크닉을 사용해야 합니다.
이벤트 처리에 대한 더 많은 정보는 Event Handling Guide for UIKit Apps를 보시기 바랍니다.
Event Handling Guide for UIKit Apps의 링크는
UIKit 링크로 연결됩니다.
Event Handling Guide for UIKit Apps
https://developer.apple.com/documentation/uikit/#//apple_ref/doc/uid/TP40009541
https://velog.io/@panther222128/UIKit
이미지 스케일링과 알파 블렌딩은 앱의 성능에 영향을 미칠 수 있는 고비용 작업들입니다. 이미지 뷰 코드의 성능을 최대화하려면 아래 팁을 고려하시기 바랍니다.
UIImage.ResizingMode.tile
옵션을 사용해서 크기 조절이 가능한 이미지 객체를 생성할 수도 있습니다. 이는 이미지를 스케일링하는 것 대신 타일로 표현합니다.isOpaque
속성을 true
로 설정하시기 바랍니다. 투명도를 확인하는 방법에 대한 정보는 Determining the Final Transparency of the Image를 보시기 바랍니다.Determining the Final Transparency of the Image는 이 글의 아래 부분에 나옵니다.
이미지 뷰가 기대한 것을 표시하지 않는다면 문제 진단을 돕는 아래 팁을 사용하시기 바랍니다.
UIImage
의 init(named:in:compatibleWith:)
메소드를 사용해야 합니다. 앱 번들 밖의 이미지는 imageWithContentsOfFile:
메소드를 사용해야 합니다.UIImageView
클래스는 draw(_:) method
메소드를 사용해 컨텐트를 그리지 않습니다. 이미지 뷰는 이미지 제공에만 사양하시기 바랍니다. 커스텀 드로잉이 이미지에 관여하도록 하려면 UIView
를 직접 서브클래싱하고 여기에 이미지를 그리시기 바랍니다.테이블 1은 인터페이스 빌더에서 이미지 뷰에 대해 설정하는 특성을 리스트로 보여주고 있습니다.
Table 1 Image view attributes
Attribute | Discussion |
---|---|
Image | 표시를 위한 이미지입니다. Xcode 프로젝트에서 이미지를 구체화할 수 있으며, 이는 단일 이미지 및 이미지 에셋에 있는 이미지를 포함합니다. 이 특성을 코드 작성으로 설정하려면 image 혹은 animationImages 속성을 사용해야 합니다. |
Highlighted | 이미지가 강조될 때 표시하기 위한 이미지입니다. 이 특성을 코드 작성으로 설정하려면 highlightedImage 혹은 highlightedAnimationImages 속성을 사용해야 합니다. |
State | 이미지의 초기 상태입니다. 강조된 이미지 표시를 위해 이 특성을 사용하시기 바랍니다. 이 특성을 코드 작성으로 설정하려면 isHighlighted 속성을 사용해야 합니다. |
이미지 뷰의 internalization은 뷰가 앱 번들로부터 로드된 정적 이미지만을 표시하는 경우 자동으로 작동합니다. 코드 작성으로 이미지를 로드하는 경우 적어도 정확한 이미지 로딩이 일부분 필요합니다.
UIImage
에서 init(named:)
클래스 메소들르 호출해서 이미지를 로드할 수 있습니다.UIImage
클래스 메소드에 전달해서 해당 이미지를 로드해야 하며, imageWithData:
혹은 imageWithContentsOfFile:
클래스 메소드가 있습니다.Note
스크린 측정항목과 레이아웃은 언어 및 로케일에 따라 변경될 수 있으며, 특히 이미지의 internalization된 버전이 다른 차원을 갖는 경우 그렇습니다. 가능하다면 이미지 리소스의 internalization된 버전에서 차원이 다른 경우를 최소화해야 합니다.
더 많은 정보는 Internationalization and Localization Guide를 보시기 바랍니다.
Internationalization and Localization Guide
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html#//apple_ref/doc/uid/10000171i
이미지 뷰는 기본값으로 접근성이 있습니다. 이미지 뷰에 대한 기본값 접근성 특성은 이미지 및 사용자 상호작용 활성화입니다.
iOS 컨트롤을 접근 가능하게 만드는 것에 대한 더 많은 정보는 UIControl
의 접근성 정보를 보시기 바랍니다. 인터페이스를 접근 가능하게 만드는 일반적인 정보는 Accessibility Programming Guide for iOS를 보시기 바랍니다.
UIControl
https://developer.apple.com/documentation/uikit/uicontrol
https://velog.io/@panther222128/UIControl
Accessibility Programming Guide for iOS
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/iPhoneAccessibility/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008785
값을 이미지 뷰의 restorationIdentifier
속성에 할당하는 경우 표시되는 이미지의 프레임 보존을 시도합니다. 구체적으로 클래스는 뷰의 bounds
, center
, transform
속성을 보존하며, 기본 레이어의 anchorPoint
속성을 보존합니다. 복원 동안 이미지가 이전과 동일하게 나타날 수 있도록 이미지 뷰는 값들을 복원합니다. 상태 보존 및 복원 작동의 방법에 대한 정보는 App Programming Guide for iOS를 보시기 바랍니다.
App Programming Guide for iOS의 링크는
UIKit 링크로 연결됩니다.
App Programming Guide for iOS
https://developer.apple.com/documentation/uikit#//apple_ref/doc/uid/TP40007072
https://velog.io/@panther222128/UIKit
앱 택스트에 통합하는 스케일링 가능한 이미지를 생성하고, 해당 이미지의 모양을 동적으로 조정합니다.
https://developer.apple.com/documentation/uikit/uiimage/configuring_and_displaying_symbol_images_in_your_ui
https://velog.io/@panther222128/Configuring-and-Displaying-Symbol-Images-in-Your-UI
작업이 진행중임을 보여주는 뷰입니다.
https://developer.apple.com/documentation/uikit/uiactivityindicatorview
https://velog.io/@panther222128/UIActivityIndicatorView
하나 혹은 하나 이상의 값 집합을 보여주기 위해 돌아가는 휠 혹은 슬롯 머신과 유사한 것을 사용하는 뷰입니다.
https://developer.apple.com/documentation/uikit/uipickerview
https://velog.io/@panther222128/UIPickerView
작업의 진행을 시간에 걸쳐 표시하는 뷰입니다.
https://developer.apple.com/documentation/uikit/uiprogressview
https://velog.io/@panther222128/UIProgressView