2

独自のサブクラスをUIImage作成して、4つの側面のそれぞれにキャップを付けた実現可能/ストレッチ可能な画像を作成できるようにしたいと思います。

iOS 5resizableImageは、中央部分を伸ばすことができないため、私のニーズに合いませんstretchableImage。また、ある種のグラデーションを繰り返したい場合でも、1ピクセルしか繰り返すことができないため、現在は非推奨になっています。

これまでのところ、すべてが正常に機能しています。独自の描画コードを実装しまし-drawInRect:たが、期待どおりに動作します。
ただし、カスタムサブクラスインスタンスをUIImageViewのイメージとして割り当てると、コードが壊れます。画像は通常のUIImageと同じようにレンダリングされます。(キャップ​​なしですべての方向にスケーリング)

4つの描画メソッドすべてにブレークポイントを設定しようとしました(drawInRect、、drawAtPointスタンドアロンとwithの両方blendMode:がありますが、呼び出されないようです。

サブクラス化せずUIImageにで使用するときにカスタム描画コードを提供する方法もありますか?UIImageViewUIImageView

また、パフォーマンスが気になります。デフォルトの伸縮可能な画像はアニメーション中に非常にうまく機能しますが、のサイズプロパティ(幅と高さ)をアニメーション化するとどうなるのでしょうかUIImageView。レンダリングコードはフレームごとに呼び出されますか?

4

1 に答える 1

2

Apple Documentationでは-drawRect:、 aをオーバーライドできないことが明確に示されているUIImageViewため、サブクラスUIImageView化も機能しません。独自のUIViewクラスを実装する必要があります。

サブクラスUIImage化も機能しません。これを試してみましたが、 public メソッドはまったく呼び出されず、 のアクセサリ メソッドでさえも呼び出されませんでしたCGImage。これを機能させるには、プライベート API をオーバーライドする必要があると思います。

サイズ変更について心配する必要はありません。レンダリング コードは最終フレームに対してのみ呼び出されます。それでも、ほとんどの場合、パフォーマンスはUIImageView. Apple はクラスを最適化して、GPU 上で実行できるようにしました。

于 2012-05-06T05:19:14.323 に答える