Если вы поместите изображение в UIImageView
за кнопкой, вы потеряете встроенную функциональность класса UIButton
, такую как adjustsImageWhenHighlighted
и adjustsImageWhenDisabled
, и, конечно, возможность установки разных изображений для разных состояний (без труда сделать это самостоятельно).
Если мы хотим, чтобы изображение было растянуто для всех состояний управления , одна попытка получить изображение с использованием imageWithCGImage:scale:orientation
, как в следующем методе:
- (UIImage *) getScaledImage:(UIImage *)img insideButton:(UIButton *)btn {
// Check which dimension (width or height) to pay respect to and
// calculate the scale factor
CGFloat imgRatio = img.size.width / img.size.height,
btnRatio = btn.frame.size.width / btn.frame.size.height,
scaleFactor = (imgRatio > btnRatio
? img.size.width / btn.frame.size.width
: img.size.height / btn.frame.size.height;
// Create image using scale factor
UIImage *scaledImg = [UIImage imageWithCGImage:[img CGImage]
scale:scaleFactor
orientation:UIImageOrientationUp];
return scaledImg;
}
Для реализации этого мы напишем:
UIImage *scaledImg = [self getScaledImage:myBtnImg insideButton:myBtn];
[myBtn setImage:scaledImg forState:UIControlStateNormal];
Это должно предотвратить растяжение изображения во всех состояниях управления. Это сработало для меня, но дайте мне знать, если это не так!
ПРИМЕЧАНИЕ: Здесь мы решаем проблему, связанную с UIButton
, но insideButton:
может также быть insideView:
или любым другим, в который нужно вписать изображение.