Ich musste runde Schaltflächen für Avatar-Fotos erstellen und fand die Antworten auf diese Frage hilfreich, aber sie brachten mich nicht ganz ans Ziel. Ich implementierte die backgroundRectForBounds
Methode und skalierte das Bild, um es anzupassen, und es funktioniert gut.
Ich habe den Code auf GitHub.
https://github.com/brennanMKE/CircleButton
Die Methode ist ebenfalls unten aufgeführt. Es ist wichtig, das Hintergrundbild einzustellen und nicht das Bild für die Schaltfläche, die mit dieser Methode nicht funktioniert.
- (CGRect)backgroundRectForBounds:(CGRect)bounds {
UIImage *backgroundImage = [self backgroundImageForState:self.state];
if (backgroundImage) {
CGFloat maxWidth = CGRectGetWidth(self.frame);
CGFloat xDelta = maxWidth / backgroundImage.size.width;
CGFloat yDelta = maxWidth / backgroundImage.size.height;
CGFloat delta = xDelta > yDelta ? xDelta : yDelta;
CGFloat x = floorf((self.bounds.size.width - (backgroundImage.size.width * delta)) / 2);
CGFloat y = floorf((self.bounds.size.height - (backgroundImage.size.height * delta)) / 2);
return CGRectMake(x, y, backgroundImage.size.width * delta, backgroundImage.size.height * delta);
}
else {
return [super backgroundRectForBounds:bounds];
}
}
1 Stimmen
Tut mir leid, dass ich das aus den Tiefen der Zeit hervorhole, aber wenn ich mich nicht irre, gibt es dort ein Speicherleck. Keine Freigabe für die Zuweisung.
0 Stimmen
@Joseph, vielen Dank für diesen Hinweis. Ich habe den Code aktualisiert.