Avevo bisogno di creare pulsanti arrotondati per le foto di avatar e ho trovato le risposte a questa domanda per aiutare ma non mi hanno fatto arrivare fino in fondo. Ho implementato il metodo backgroundRectForBounds
e ridimensionato l'immagine per adattarla e funziona bene.
Ho il codice su GitHub.
https://github.com/brennanMKE/CircleButton
Il metodo è anche elencato di seguito. È importante impostare l'immagine di sfondo e non l'immagine per il pulsante che non funziona con questo metodo.
- (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];
}
}
Siamo spiacenti, di trascinare che fino dalle profondità del tempo, ma v'è una perdita di memoria in là, se non mi sbaglio. Nessun rilascio per l'allocazione. –
@Joseph, grazie per averlo indicato. Ho aggiornato il codice. –