Wenn Sie das Bild UIImageView
hinter der Schaltfläche platzieren, verlieren Sie die integrierte Funktionalität der UIButton
Klasse, wie z. B. adjustsImageWhenHighlighted
und adjustsImageWhenDisabled
, und natürlich die Möglichkeit, verschiedene Bilder für verschiedene Zustände festzulegen (ohne dies selbst zu tun).
Wenn ein Bild für alle Kontrollzustände nicht gestreckt werden soll, besteht ein Ansatz darin, das Bild imageWithCGImage:scale:orientation
wie in der folgenden Methode zu verwenden:
- (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;
}
Um dies umzusetzen, würden wir schreiben:
UIImage *scaledImg = [self getScaledImage:myBtnImg insideButton:myBtn];
[myBtn setImage:scaledImg forState:UIControlStateNormal];
Dies sollte verhindern, dass sich das Bild in allen Kontrollzuständen dehnt. Es hat bei mir funktioniert, aber lassen Sie es mich wissen, wenn es nicht funktioniert!
HINWEIS: Hier sprechen wir ein Problem an UIButton
, das insideButton:
sich insideView:
auf das Bild bezieht , aber das könnte genauso gut sein oder was auch immer.