Nếu bạn đặt hình ảnh vào UIImageView
phía sau nút, bạn sẽ mất chức năng tích hợp của UIButton
lớp, chẳng hạn như adjustsImageWhenHighlighted
và adjustsImageWhenDisabled
, và tất nhiên là khả năng đặt các hình ảnh khác nhau cho các trạng thái khác nhau (mà không cần phải tự làm điều này).
Nếu chúng ta muốn xóa hình ảnh cho tất cả các trạng thái điều khiển , một điều khó khăn là lấy hình ảnh bằng cách sử dụng imageWithCGImage:scale:orientation
, như trong phương pháp sau:
- (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;
}
Để thực hiện điều này, chúng tôi sẽ viết:
UIImage *scaledImg = [self getScaledImage:myBtnImg insideButton:myBtn];
[myBtn setImage:scaledImg forState:UIControlStateNormal];
Điều này sẽ ngăn hình ảnh bị kéo dài ở tất cả các trạng thái điều khiển. Nó hiệu quả với tôi, nhưng hãy cho tôi biết nếu nó không hiệu quả!
LƯU Ý: Ở đây chúng tôi đang giải quyết một vấn đề liên quan đến UIButton
, nhưng insideButton:
cũng có thể là insideView:
, hoặc bất cứ điều gì mà người ta muốn để phù hợp với hình ảnh.