UIImageView
A view that displays a single image or a sequence of animated images in your interface.
Declaration
@MainActor class UIImageViewMentioned in
Overview
Image views let you efficiently draw any image that can be specified using a UIImage object. For example, you can use the UIImageView class to display the contents of many standard image files, such as JPEG and PNG files. You can configure image views programmatically or in your storyboard file and change the images they display at runtime. For animated images, you can also use the methods of this class to start and stop the animation and specify other animation parameters.
[Image]
Understand how images are scaled
An image view uses its contentMode property and the configuration of the image itself to determine how to display the image. It’s best to specify images whose dimensions match the dimensions of the image view exactly, but image views can scale your images to fit all or some of the available space. If the size of the image view itself changes, it automatically scales the image as needed.
For an image without cap insets, the presentation of the image is determined solely by the image view’s contentMode property. The UIView.ContentMode.scaleAspectFit and UIView.ContentMode.scaleAspectFill modes scale the image to fit or fill the space while maintaining the image’s original aspect ratio. The UIView.ContentMode.scaleToFill value scales the image without regard to the original aspect ratio, which can cause the image to appear distorted. Other content modes place the image at the appropriate location in the image view’s bounds without scaling it.
For a resizable image with cap insets, those insets affect the final appearance of the image. Specifically, cap insets define which parts of the image may be scaled and in which directions. You can create a resizable image that stretches using the resizableImage(withCapInsets:resizingMode:) method of UIImage. When using an image of this type, you typically set the image view’s content mode to UIView.ContentMode.scaleToFill so that the image stretches in the appropriate places and fills the image view’s bounds.
For tips on how to prepare images, see Debug issues with your image view. For more information on creating resizable images with cap insets, see UIImage.
Determine the final transparency of the image
Images are composited onto the image view’s background and are then composited into the rest of the window. Any transparency in the image allows the image view’s background to show through. Similarly, any further transparency in the background of the image is dependent on the transparency of the image view and the transparency of the UIImage object it displays. When the image view and its image both have transparency, the image view uses alpha blending to combine the two.
The image is composited onto the image view’s background.
If the image view’s isOpaque property is true, the image’s pixels are composited on top of the image view’s background color and the alpha property of the image view is ignored.
If the image view’s isOpaque property is false, the alpha value of each pixel is multiplied by the image view’s alpha value, with the resulting value becoming the actual transparency value for that pixel. If the image doesn’t have an alpha channel, the alpha value of each pixel is assumed to be
1.0.
Animate a sequence of images
An image view can store an animated image sequence and play all or part of that sequence. You specify an image sequence as an array of UIImage objects and assign them to the animationImages property. Once assigned, you can use the methods and properties of this class to configure the animation timing and to start and stop the animation.
Consider the following tips when displaying a sequence of animated images:
All images in the sequence should have the same size. When scaling is required, the image view scales each image in the sequence separately. If the images are different sizes, scaling may not yield the results you want.
All images in the sequence should use the same content scale factor. Make sure the scale property of each image contains the same value.
Respond to touch events
Image views ignore user events by default. Normally, you use image views only to present visual content in your interface. If you want an image view to handle user interactions as well, change the value of its isUserInteractionEnabled property to true. After doing that, you can attach gesture recognizers or use any other event handling techniques to respond to touch events or other user-initiated events.
For more information about handling events, see Event Handling Guide for UIKit Apps.
Improve performance
Image scaling and alpha blending are two relatively expensive operations that can impact your app’s performance. To maximize performance of your image view code, consider the following tips:
Cache scaled versions of frequently used images. If you expect certain large images to be displayed frequently in a scaled-down thumbnail view, consider creating the scaled-down images in advance and storing them in a thumbnail cache. Doing so alleviates the need for each image view to scale them separately.
Use images whose size is close to the size of the image view. Rather than assigning a large image to an image view, created a scaled version that matches the current size of the image view. You can also create a resizable image object using the UIImage.ResizingMode.tile option, which tiles the image instead of scaling it.
Make your image view opaque whenever possible. Unless you’re intentionally working with images that contain transparency (drawing UI elements, for example), make sure the isOpaque property of your image view is set to true. For more information about how transparency is determined, see Determine the final transparency of the image.
Debug issues with your image view
If your image view isn’t displaying what you expected, use the following tips to help diagnose the problem:
Load images using the correct method. Use the init(named:in:compatibleWith:) method of UIImage to load images from asset catalogs or your app’s bundle. For images outside of your app’s bundle, use the imageWithContentsOfFile: method.
Don’t use image views for custom drawing. The UIImageView class doesn’t draw its content using the draw(_:) method. Use image views only to present images. To do custom drawing involving images, subclass UIView directly and draw your image there.
Interface Builder attributes
The following table lists the attributes that you configure for image views in Interface Builder.
Attribute | Discussion |
|---|---|
Image | The image to display. You can specify any image in your Xcode project, including standalone images and those in image assets. To set this attribute programmatically, use the Image or Animationimages property. |
Highlighted | The image to display when the image view is highlighted. To set this attribute programmatically, use the Highlightedimage or Highlightedanimationimages property. |
State | The initial state of the image. Use this attribute to mark the image as highlighted. To set this attribute programmatically, use the Ishighlighted property. |
Internationalization
Internationalization of image views is automatic if your view displays only static images loaded from your app bundle. If you’re loading images programmatically, you’re at least partially responsible for loading the correct image.
For resources in your app bundle, you do this by specifying the name in the attributes inspector or by calling the init(named:) class method on UIImage to obtain the localized version of each image.
For images that aren’t in your app bundle, your code must do the following:
Determine which image to load in a manner specific to your app, such as providing a localized string that contains the URL.
Load that image by passing the URL or data for the correct image to an appropriate UIImage class method, such as imageWithData: or imageWithContentsOfFile:.
For more information, see Localization.
Accessibility
Image views are accessible by default. The default accessibility traits for an image view are Image and User Interaction Enabled.
For more information about making iOS controls accessible, see the accessibility information in UIControl. For general information about making your interface accessible, see Accessibility for UIKit.
State preservation
When you assign a value to an image view’s restorationIdentifier property, it attempts to preserve the frame of the displayed image. Specifically, the class preserves the values of the bounds, center, and transform properties of the view and the anchorPoint property of the underlying layer. During restoration, the image view restores these values so that the image appears exactly as before. For more information about how state preservation and restoration works, see Restoring your app’s state.
Topics
Creating an image view
Accessing the displayed images
Animating a sequence of images
animationImageshighlightedAnimationImagesanimationDurationanimationRepeatCountstartAnimating()stopAnimating()isAnimating
Configuring the image view
Configuring the appearance of symbol images
Configuring symbol effects
addSymbolEffect(_:options:animated:completion:)addSymbolEffect(_:options:animated:completion:)addSymbolEffect(_:options:animated:completion:)setSymbolImage(_:contentTransition:options:completion:)removeSymbolEffect(ofType:options:animated:completion:)removeSymbolEffect(ofType:options:animated:completion:)removeSymbolEffect(ofType:options:animated:completion:)removeAllSymbolEffects(options:animated:)UISymbolEffectCompletionUISymbolEffectCompletionContext