1

ボタンのセットとさまざまなサイズの画像があります。ボタンに正しい縦横比で収まるように、各画像を拡大縮小したいと思います。画像をスケーリングしたら、ボタンの画像プロパティをスケーリングされたバージョンに設定します。

    UIImage *scaledImage = [image scaledForButton:pickerButton];
    [pickerButton setImage:scaledImage forState:UIControlStateNormal];

私の scaledForButton メソッドは、UIImage のクラス拡張で定義されています。次のようになります。

- (UIImage *)scaledForButton:(UIButton *)button 
{
    // Check which dimension (width or height) to pay respect to and
    // calculate the scale factor
    CGFloat imageRatio = self.size.width / self.size.height; 
    CGFloat buttonRatio = button.frame.size.width / button.frame.size.height;
    CGFloat scaleFactor = (imageRatio > buttonRatio ? self.size.width/button.frame.size.width : self.size.height/button.frame.size.height);

    // Create image using scale factor
    UIImage *scaledimage = [UIImage imageWithCGImage:[self CGImage]
                                               scale:scaleFactor
                                         orientation:UIImageOrientationUp];
    return scaledimage;    
}

これを iPad2 で実行すると、正常に動作し、画像が正しくスケーリングされます。ただし、Retina ディスプレイ (シミュレーターとデバイスの両方) で実行すると、画像が正しくスケーリングされず、ボタンに押し込まれます。

これが網膜でのみ発生する理由はありますか? 数日間頭を悩ませていますが、わかりません。どちらも同じ iOS を実行しており、スケールと比率の出力を確認しましたが、デバイスに関係なく常に同じです。どうもありがとう。

4

1 に答える 1

0

ここで答えを見つけました: UIButton does not listen to content mode setting?

.contentMode を設定している場合は、UIButton だけでなく、UIButton の imageView プロパティを設定する必要があるようで、適切に機能しました。

iPad 3 の問題は、Herman が示唆したとおりでした。CGImage はまだ UIButton よりもはるかに大きいため、サイズを縮小しても、ボタンに合わせてサイズを変更する必要がありました。

于 2012-07-06T11:21:07.240 に答える