ボタンのセットとさまざまなサイズの画像があります。ボタンに正しい縦横比で収まるように、各画像を拡大縮小したいと思います。画像をスケーリングしたら、ボタンの画像プロパティをスケーリングされたバージョンに設定します。
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 を実行しており、スケールと比率の出力を確認しましたが、デバイスに関係なく常に同じです。どうもありがとう。