UIImageView
継承:UIView : UIResponder : NSObject(Class)
従属:UIAppearanceContainer, UICoordinateSpace, NSObject(Protocol), NSCoding, UIDynamicItem , UIFocusEnvironment, UITraitEnvironment, , UIAppearance
フレームワーク: iOS 2.0 以降の UIKit。関連情報...
概観
UIImageView オブジェクトは、単一のイメージまたはあなたのインターフェイスで、アニメーション化されたイメージのシーケンスを表示します。イメージビューを使用すると、効率的に UIImage オブジェクトを使用して指定し、任意のイメージを描画できるようになります。たとえば、JPEG や PNG ファイルのような多くの標準イメージファイルの内容を表示するのに、このクラスを使用できます。プログラム的に、あるいはストーリーボードファイルでイメージビューを構成し、それらが実行時に表示するイメージを変更できます。アニメーション化されたイメージについては、またアニメーションの起動や停止をし、他のアニメーションパラメータを指定するには、このクラスのメソッドを使用できます。
基本的なビュー動作の詳細については、iOS 用ビュープログラミングのガイド を参照してください。
画像を拡大縮小される方法の理解
イメージビューは、その contentMode プロパティを使用し、イメージを表示する方法を決定するのにイメージ自体の構成を使用します。その寸法が正確にイメージビューの寸法に一致するイメージを指定するのが最善ですが、イメージビューは、すべてまたは利用可能なスペースの一部に合わせてイメージを拡大縮小することができます。イメージビューのサイズ自体が変更した場合は、必要に応じて、自動的にイメージを拡大縮小します。
キャップインセットのないイメージの場合、イメージの表現は、イメージビューの contentMode プロパティによってのみ決定されます。UIViewContentModeScaleAspectFit と UIViewContentModeScaleAspectFill モードがイメージの元の縦横比を維持しながら、スペースを埋めるか適合させるために、画像を書くだお縮小します。UIViewContentModeScaleToFill 値は、イメージが歪んで見えることがありますが元の縦横比に関係なく、イメージを拡大縮小します。その他のコンテンツモードは、それを拡大縮小することなく、イメージビューの境界の適切な位置にイメージを配置します。
イメージを準備する方法のヒントについては、イメージビューで問題を徹底的に調べる を参照してください。キャップインセットでサイズ変更可能なイメージの作成の詳細については、UIImage クラスリファレンス を参照してください。
画像の最終的な透明度の決定
イメージはイメージビューの背景上に合成され、その後、ウィンドウの残りの部分に合成されます。イメージ内の任意の透明度で、イメージビューの背景が透けて見えるようになります。同様に、任意のさらなる透明性は イメージビューの透明性と、それが表示する UIImage オブジェクトの透明度に依存しています。イメージビューとイメージが両方とも透明性を有する場合、イメージビューは、二つを結合するアルファブレンディングを使用します。
- イメージは、イメージビューの背景上に合成されます。
- パラ
- 画像ビューの opaque プロパティが YES の場合、イメージのピクセルがイメージビューの背景色の上部に合成され、イメージビューの alpha プロパティは無視されます。
- イメージビューの opaque プロパティが NO の場合、各ピクセルの alpha 値は、結果として得られる値は、そのピクセルに対する実際の透明度の値になって、イメージビューの alpha 値が乗算されます。イメージが alpha チャンネルを持っていない場合、各ピクセルのアルファ値は、1.0 であると仮定されます。
重要:不透明でないイメージビューの alpha チャンネルを持つイメージのアルファチャンネルを合成するのは計算コストが高いです。Core Animation のシャドウを使用する場合は、シャドウの形状は、その時のビューの内容に基づいており、動的に計算されなければならないので、パフォーマンスへの影響はさらに拡大されます。意図的にイメージの alpha チャンネルまたはイメージビューの alpha チャンネルを使用していない場合は、パフォーマンスを向上させるために opaque プロパティを NO に設定します。追加の最適化のヒントについては、パフォーマンス向上のためのヒント を参照してください。
イメージシーケンスをアニメーション化
イメージビューは、アニメーション化したイメージシーケンスを格納し、そのシーケンスのすべてまたは一部を再生できます。UIImage オブジェクトの配列として、イメージシーケンスを指定し、それらを animationImages プロパティに割り当てます。一度割り当てられると、アニメーションのタイミングと、開始と停止を構成するには、このクラスのメソッドとプロパティを使用できます。
注意: また、animatedImageWithImages:duration: メソッドを使用して、個々のイメージのシーケンスから単一の UIImage オブジェクトを作成できます。そうすることで animationImages プロパティに個々のイメージを割り当てられたかのように同じ結果が得られます。
アニメーション化されたイメージのシーケンスを表示する場合、以下のヒントを考慮してください。
- シーケンス内のすべてのイメージは、同じサイズを持つ必要があります。 拡大縮小が必要な場合、イメージビューは別々にシーケンス内の各イメージを拡大縮小します。イメージサイズが異なる場合は、拡大縮小は、望みの結果が得られない場合があります。
- シーケンス内のすべての画像は、同じ内容の拡大縮小ファクタを使用する必要があります。 各イメージの scale プロパティが同じ値を含んでいることを確認して下さい。
タッチイベントへの応答
イメージビューは、デフォルトではユーザーイベントを無視します。通常、イメージビューをあなたのインタフェースのビジュアルコンテンツを提示するだけのために使用します。イメージビューも同様にユーザーとの対話を処理したい場合は、その userInteractionEnabled プロパティの値を YES に変更します。それを終えたら、ジェスチャー認識装置を接続し、タッチイベントに反応する他のイベント処理技術を使用し、他のユーザーが開始したイベントに応答できます。
イベントの処理の詳細については、iOS 用イベントの処理ガイド を参照してください。
パフォーマンス向上のためのヒント
イメージ拡大縮小やアルファブレンディングは、アプリのパフォーマンスに影響を与える 2 つの比較的高価な操作です。あなたのイメージビューのコードのパフォーマンスを最大化するために、以下のヒントを考慮してください。
- キャッシュは、頻繁に使用されるイメージのバージョンを拡張しました。 特定の大きなイメージがスケールダウンし、サムネイルビューで頻繁に表示されることが予想される場合は、事前にスケールダウンされたイメージを作成し、サムネイルキャッシュに格納することを検討してください。そうすることにより、それらを別々に縮小するために、各イメージビューのための必要性を軽減します。
- そのサイズがイメージビューのサイズに近いイメージを使用してください。 イメージビューに大きな画像を割り当てるよりも、むしろイメージビューの現在のサイズに一致するスケーリングされたバージョンを作成して下さい。また、それをスケーリングする代わりに、イメージを分割する UIImageResizingModeTile オプションを使用して、サイズ変更可能なイメージオブジェクトを作成することもできます。
- いつでも可能ならあなたのイメージビューを不透明にします。 意図的に透明性(例えば、描画 UI 要素) を含むイメージで作業している場合を除き、あなたのイメージビューの opaque プロパティが YES に設定されていることを確認します。透明度が決定される方法の詳細については、画像の最終的な透明度の決定 を参照してください。
イメージビューを使用した問題のデバッグ
イメージビューが、あなたが期待したものを表示していない場合は、問題の診断に役立つ以下のヒントを使用します。
- 正しいメソッドを使用してイメージをロード。 UIImage の imageNamed:inBundle:compatibleWithTraitCollection: メソッドを使用し、アセットカタログやアプリのバンドルからイメージをロードして下さい。アプリのバンドルの外のイメージについては、imageWithContentsOfFile: メソッドを使用します。
- カスタム描画のためにはイメージビューを使用しないでください。UIImageView クラスは drawRect: メソッドを使用して、そのコンテンツを描画しません。イメージを提示するためにのみイメージビューを使用して下さい。イメージを含むカスタムで描画を行うには、UIView を直せちサブクラス化し、そこにあなたのイメージを描画します。
Interface Builder 属性
表 1 は、Interface Builder でのイメージビューのために構成する属性を一覧にしました。
表 1 イメージビューの属性
属性 | 議論 |
---|---|
イメージ | 表示するべき画像。スタンドアロンのイメージやイメージアセット内のそれらを含め、Xcode プロジェクト内の全てのイメージを指定できます。プログラムでこの属性を設定するには、image や animationImages プロパティを使用して下さい。 |
強調表示 | イメージビューが強調表示されたときに表示すべきイメージ。プログラムでこの属性を設定するには、highlightedImage や highlightedAnimationImages プロパティを使用して下さい。 |
スケール | イメージの初期状態。強調表示としてイメージをマークするため、この属性を使用して下さい。プログラムでこの属性を設定するには、highlighted プロパティを使用して下さい。 |
国際化
ビューが、あなたのアプリ・バンドルからロードされた静止イメージのみを表示する場合はイメージビューの国際化は自動的に行われます。あなたがプログラムでイメージをロードする場合は、少なくとも部分的に正しいイメージをロードする責任があります。
- アプリ・バンドル内のリソースの場合、各イメージのローカライズされたバージョンを得るために、属性インスペクタで名前を指定するか、UIImage の imageNamed: クラスメソッドを呼び出して、これを行います。
- あなたのアプリ・バンドルにないイメージの場合、あなたのコードは、以下のことを行わなければなりません。
- URL を含んでいるローカライズされた文字列を提供するようなものとして、あなたのアプリに固有の様式でロードするイメージを決定します。
- imageWithData: や imageWithContentsOfFile: などの適切な UIImage クラスメソッドに正しいイメージの URL またはデータを渡すことにより、そのイメージをロードします
注意: スクリーンの指標とレイアウトはまた、あなたのイメージの国際化バージョンが異なる寸法を持っている場合は特に、言語およびロケールに応じて変更されることもあります。可能であれば、イメージリソースの国際化バージョンの寸法の差異を最小にするようにしてみてください。
詳細については、国際化とローカライゼーション・ガイド を参照してください。
アクセシビリティ
イメージビューはデフォルトでアクセス可能です。イメージビュー用のデフォルトのアクセシビリティ形質はイメージとユーザーの相互作用が有効になっています。
iOS の、アクセスを制御することの詳細については、UIcontrol クラスリファレンス のアクセシビリティ情報を参照してください。インターフェイスにアクセスすることの一般的な情報については、iOS 用のアクセシビリティプログラミングガイド を参照してください。
状態の保存
イメージビューの restorationIdentifier プロパティに値を割り当てると、それは表示されたイメージのフレームを保存しようとします。具体的には、クラスはビューの bounds、center 及び transform プロパティの値を保持し、基礎の層の anchorPoint プロパティを保存します。復元時には、イメージビューは完全に以前のように表示されるように、イメージビューは、これらの値を復元します。状態の保存と復元がどのように動作するかの詳細については、iOS 用アプリプログラミングガイド を参照してください。
タスク
イメージビューの初期化
– initWithImage:
指定されたイメージで初期化されたイメージビューを返します。
宣言
<< SWIFT >>
init(image image: UIImage?) << OBJECTIVE-C >> - (instancetype)initWithImage:(UIImage *)image
パラメーター
image | イメージビューに表示すべき初期画イメージ。イメージのアニメーションシーケンスを含むイメージオブジェクトを指定できます。 |
戻り値
初期化されたイメージビューオブジェクト。
議論
あなたが指定したイメージは、イメージビュー自体の初期サイズを構成するために使用されます。イメージビューの最終的なサイズをスクリーン上に調整するために、制約およびイメージビューのコンテンツモードを使用します。このメソッドは、userInteractionEnabled プロパティを NO に設定することにより、イメージビューのためのユーザーの相互作用を無効にします。
その期間が 0 よりも大きいアニメーション化されたイメージを指定した場合、イメージビューは自動的にアニメーションの再生を開始します。
利用可能
iOS 2.0 以降で利用可能。
– initWithImage:highlightedImage:
指定された正規で強調表示されたイメージで初期化されたイメージビューを返します。
宣言
<< SWIFT >>
init(image image: UIImage?, highlightedImage highlightedImage: UIImage?) << OBJECTIVE-C >> - (instancetype)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage
パラメーター
image | イメージビューに表示すべき初期画像。イメージのアニメーション化されたシーケンスを含むイメージオブジェクトを指定できます。 |
highlightedImage | イメージビューが強調表示されたときに表示すべきイメージ。イメージのアニメーション化されたシーケンスを含むイメージオブジェクトを指定できます。 |
戻り値
初期化されたイメージビューオブジェクト。
議論
指定したイメージは、イメージビュー自体の初期サイズを構成するために使用されます。イメージビューの最終的なサイズをスクリーン上に調整するために、制約およびイメージビューのコンテンツモードを使用して下さい。このメソッドは、userInteractionEnabled プロパティを NO に設定することにより、イメージビューのためのユーザーの相互作用を無効にします。
その期間が 0 よりも大きいのアニメーション化されたイメージを指定した場合、イメージビューは自動的にアニメーション再生を開始します。
利用可能
iOS 3.0 以降で利用可能。
表示される画像へのアクセス
image プロパティ
イメージビューに表示されたイメージ。
宣言
<< SWIFT >>
var image: UIImage? << OBJECTIVE-C >> @property(nonatomic, strong) UIImage *image
議論
このプロパティは、イメージビューで表示される主要なイメージを含んでいます。イメージビューが、その自然な状態にあるとき、このイメージが表示されます。強調表示された場合、highlightedImage プロパティの代わりにイメージビューは、イメージを表示します。そのプロパティが nil に設定されている場合は、イメージビューは、このイメージにデフォルトの強調表示を適用します。animationImages プロパティはイメージの有効なセットを含んでいる場合は、それらのイメージが代わりに使用されます。
このプロパティのイメージを変更しても、イメージビューのサイズは自動的に変更しません。イメージを設定した後、新しいイメージとアクティブな制約に基づいてイメージビューのサイズを再計算する sizeToFit メソッドを呼び出して下さい。
このプロパティは、初期化時に指定したイメージに設定されています。あなたのイメージビューを初期化するのに initWithImage: や initWithImage:highlightedImage: メソッドを使用しなかった場合、このプロパティの初期値は nil です。
利用可能
iOS 2.0 以降で利用可能。
以下も見よ
animationImageshighlightedImage
highlightedImage プロパティ
イメージビューに表示された強調されたイメージ。
宣言
<< SWIFT >>
var highlightedImage: UIImage? << OBJECTIVE-C >> @property(nonatomic, strong) UIImage *highlightedImage
議論
イメージビューの highlighted プロパティが YES の時、このプロパティのイメージが表示されます。highlightedAnimationImages プロパティがイメージの有効なセットを含んでいる場合は、代わりにそれらのイメージが使用されます。
このプロパティは、初期化時に指定したイメージ(もしあれば) に設定されています。あなたのイメージビューを初期化するのに initWithImage:highlightedImage: メソッドを使用しなかった場合、このプロパティの初期値は nil です。
利用可能
iOS 3.0 以降で利用可能。
以下も見よ
highlightedAnimationImagesイメージのシーケンスをアニメーション化する
animationImages プロパティ
アニメーションに使用する UIImage オブジェクトの配列。
宣言
<< SWIFT >>
var animationImages: [UIImage]? << OBJECTIVE-C >> @property(nonatomic, copy) NSArray <UIImage *> *animationImages
議論
配列は、UIImage オブジェクトを含めなければなりません。配列に何度も同じイメージオブジェクトを使用してもよいです。このプロパティをnil 以外の値に設定すると、image プロパティによって表されるイメージを非表示にします。このプロパティの値は、デフォルトでは nil です。
利用可能
iOS 2.0 以降で利用可能。
以下も見よ
imagehighlightedAnimationImages プロパティ
ビューが強調表示されたときに、アニメーションに使用するべき UIImage オブジェクトの配列。
宣言
<< SWIFT >>
var highlightedAnimationImages: [UIImage]? << OBJECTIVE-C >> @property(nonatomic, copy) NSArray <UIImage *> *highlightedAnimationImages
議論
配列は、UIImage オブジェクトを含めなければなりません。配列に何度も同じ画像オブジェクトを使用してもよいです。このプロパティを nil 以外の値に設定すると、highlightedImage プロパティによって表されるイメージを非表示にします。このプロパティの値は、デフォルトでは nil です。
利用可能
iOS 3.0 以降で利用可能。
以下も見よ
highlightedImageanimationDuration プロパティ
イメージの周期一回を通過するのにかかる時間の量。
宣言
<< SWIFT >>
var animationDuration: NSTimeInterval << OBJECTIVE-C >> @property(nonatomic) NSTimeInterval animationDuration
議論
持続時間は秒単位で測定されます。このプロパティのデフォルト値は 1 秒の 1/30 を乗じたイメージの数に等しい持続時間を使用する、イメージビューの原因となる 0.0 です。このように、30 のイメージがある場合、持続時間は 1 秒になります。
利用可能
iOS 2.0 以降で利用可能。
animationRepeatCount プロパティ
アニメーションを繰り返す回数を指定します。
宣言
<< SWIFT >>
var animationRepeatCount: Int << OBJECTIVE-C >> @property(nonatomic) NSInteger animationRepeatCount
議論
デフォルト値は 0 で、無限にアニメーションを繰り返します。
利用可能
iOS 2.0 以降で利用可能。
– startAnimating
受信者でイメージのアニメーション化を開始します。
宣言
<< SWIFT >>
func startAnimating() << OBJECTIVE-C >> - (void)startAnimating
議論
このメソッドは、リストの最初のイメージからアニメーションを常に開始します。
利用可能
iOS 2.0 以降で利用可能。
– stopAnimating
受信者でイメージのアニメーション化を停止します。
宣言
<< SWIFT >>
func stopAnimating() << OBJECTIVE-C >> - (void)stopAnimating
利用可能
iOS 2.0 以降で利用可能。
– isAnimating
アニメーションが実行されているかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func isAnimating() -> Bool << OBJECTIVE-C >> - (BOOL)isAnimating
戻り値
アニメーションが実行されている場合は YES。それ以外の場合は、NO。
利用可能
iOS 2.0 以降で利用可能。
イメージビューの構成
userInteractionEnabled プロパティ
無視され、イベントキューから削除されるかどうかを決定するブール値。
宣言
<< SWIFT >>
var userInteractionEnabled: Bool << OBJECTIVE-C >> @property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled
議論
このプロパティは、UIView の親クラスから継承されます。このクラスは、このプロパティのデフォルト値を NO に変更します。
利用可能
iOS 2.0 以降で利用可能。
highlighted プロパティ
イメージが強調表示されているかどうかを決定するブール値。
宣言
<< SWIFT >>
var highlighted: Bool << OBJECTIVE-C >> @property(nonatomic, getter=isHighlighted) BOOL highlighted
議論
このプロパティは、普通の、または強調表示されたイメージが使用されているかどうかを決定します。highlighted が YES に設定されている場合、アニメーション化されていないイメージは highlightedImage プロパティを使用し、アニメーション化されたイメージは highlightedAnimationImages を使用します。これらのプロパティの両方が nil に設定されているか、または highlighted が NO に設定されている場合、それは image と animationImages プロパティを使用します。
利用可能
iOS 3.0 以降で利用可能。
tintColor プロパティ
ビュー階層内の tint テンプレートイメージに使用される色。
宣言
<< SWIFT >>
var tintColor: UIColor! << OBJECTIVE-C >> @property(nonatomic, strong) UIColor *tintColor
議論
デフォルトは nil です。nil でない値が指定されている場合、色はイメージビューに付属した全てのテンプレートイメージに適用されます。詳細については、UIImage クラスの renderingMode プロパティを参照してください。
利用可能
iOS 7.0 以降で利用可能。
次の章