Jika Anda meletakkan gambar di UIImageViewbelakang tombol, Anda akan kehilangan fungsionalitas built-in dari UIButtonkelas, seperti adjustsImageWhenHighlighteddan 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.