Jika Anda meletakkan gambar di UIImageView
belakang tombol, Anda akan kehilangan fungsionalitas built-in dari UIButton
kelas, seperti adjustsImageWhenHighlighted
dan adjustsImageWhenDisabled
, dan tentu saja kemampuan untuk mengatur gambar yang berbeda untuk keadaan yang berbeda (tanpa repot melakukan ini sendiri).
Jika kita ingin gambar tidak terikat untuk semua status kontrol , salah satu pendekatannya adalah menggunakan gambar imageWithCGImage:scale:orientation
, seperti dalam metode berikut:
- (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;
}
Untuk menerapkan ini kami akan menulis:
UIImage *scaledImg = [self getScaledImage:myBtnImg insideButton:myBtn];
[myBtn setImage:scaledImg forState:UIControlStateNormal];
Ini akan mencegah gambar meregang di semua status kontrol. Ini berhasil untuk saya, tetapi beri tahu saya jika tidak!
CATATAN: Di sini kami menangani masalah yang berkaitan dengan UIButton
, tetapi insideButton:
mungkin juga insideView:
, atau apa pun yang ingin disesuaikan dengan gambar.