Xcode イメージ カタログでのスライスの使用に問題があります。アセット カタログに画像があり、そのカタログには「SquareReactionButtonCrisp」という名前の画像があります。私のxibでは、この名前を参照して背景として設定しています。それでも、xib でこのボタンのサイズを変更して再構築すると、画像はスライス ラインから拡大するのではなく引き伸ばされます。何か案は?スクリーンショットを添付。ありがとう、サム
2 に答える
アセット カタログは Xcode 5 で導入されましたが、アセット カタログのイメージ スライス機能を使用するには、デプロイ ターゲットを iOS7 に設定する必要があります。ターゲットが iOS 6 に設定されている場合、これが問題の原因である可能性があります。人が自分の質問に答えた同様の投稿を参照してください。アセット カタログ イメージのスライス情報をプログラムでどのように使用しますか?
iOS 6/7 と互換性のある私のソリューションは、Xib ファイルでユーザー定義のランタイム属性を使用することです。そのため、xib に設定された画像を、ボタンのキャップ インセットを備えた伸縮可能な画像に置き換えるために、ソース コードのいたるところに洗練されていない行を記述する必要はありません。
ステップ 1: Xib でボタンを選択し、Identity Inspector パネルで User Defined Runtime Attributes を設定します。キャップ インセットを設定するための属性を定義できます。たとえば、ボタンにデフォルトのキャップインセットを使用することを示す単純なブール値を持つ「capEnabled」という属性。(スクリーンショットを添付するつもりでしたが、画像を投稿するには少なくとも10の評判が必要だと言われました... :-( )
ステップ 2: UIButton にカテゴリを作成し、プロパティ「capEnabled」を追加して、ゲッター メソッドとセッター メソッドを実装します。
@interface UIButton (NBAHelper)
@property (nonatomic, assign) BOOL capEnabled;
@end
@implementation UIButton (NBAHelper)
-(BOOL)capEnabled{
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
CGFloat capLeft = buttonBackgroundImage ? buttonBackgroundImage.capInsets.left : 0;
return capLeft>0;
}
-(void)setCapEnabled:(BOOL)capEnabled{
if (capEnabled) {
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
if (buttonBackgroundImage) {
[self setBackgroundImage:[buttonBackgroundImage stretchableImageWithLeftCapWidth:5 topCapHeight:5] forState:UIControlStateNormal];
}
}
}
@end
ステップ 3: 作成した UIButton の新機能を使用するすべての場所で、カテゴリのヘッダー ファイルをインポートするか、単に .pch ファイルにインポートします。
私の解決策がお役に立てば幸いです。