Ich musste abgerundete Schaltflächen für Avatar-Fotos erstellen und fand die Antworten auf diese Frage, um zu helfen, aber sie brachten mich nicht den ganzen Weg dorthin. Ich implementierte die backgroundRectForBounds
Methode und skalierte das Bild passend und es funktioniert gut.
Ich habe den Code auf GitHub.
https://github.com/brennanMKE/CircleButton
Das Verfahren wird auch weiter unten. Es ist wichtig, das Hintergrundbild und nicht das Bild für die Schaltfläche festzulegen, das 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];
}
}
Sorry, das aus der Tiefe der Zeit zu ziehen, aber es ist ein Speicherleck dort, wenn ich mich nicht täuscht. Keine Freigabe für das Alloc. –
@Joseph, danke, dass du das herausgebracht hast. Ich habe den Code aktualisiert. –