Sto sviluppando un'applicazione iOS 4.UIImageView, setClipsToBounds e come le mie immagini stanno perdendo la testa
sto usando questo codice su un UIImageView
su un UITableViewCell
:
cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];
Le mie immagini sono più alte che larghe, e quando ho impostato UIViewContentModeScaleAspectFill
, le immagini vengono adattate alla larghezza, con larghezza UIImageView. Facendo questo, l'immagine diventa più grande di UIImageView e la vedo fuori UIImageView
.
Quindi, ho bisogno di usare setClipsToBounds:YES
per non permettere questo, ma ora tutte le mie immagini perdono la testa.
C'è un modo per utilizzare UIViewContentModeScaleAspectFill e centrare l'angolo dell'immagine in alto a sinistra con l'angolo in alto a sinistra UIImageView
? Se ho bisogno di perdere una parte dell'immagine, preferisco perdere i piedi che la testa.
UPDATE
sto usando sdWebImage quadro e ho usato Vadim Yelagin risposta e questo è il mio codice ora:
[cell.photo setImageWithURL:[NSURL URLWithString:entry.photo]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(UIImage *image) {
CGFloat scaleX = cell.photoBorder.bounds.size.width/image.size.width;
CGFloat scaleY = cell.photoBorder.bounds.size.height/image.size.height;
CGFloat scale = MAX(scaleX, scaleY);
cell.photo.frame = CGRectMake(0, 0, image.size.width * scale, image.size.height * scale);
cell.photo.image = image;
}
failure:nil];
devo aspettare per ottenere tutte le immagini caricate e ricaricare spostare UITableView per vedere l'immagine giusta sulla cella di destra (questo perché le immagini vengono memorizzate nella cache e carica più velocemente).
Utilizzare invece cell.photo.frame
e cell.photo.image
Devo passare al blocco indexPath.row
per ottenere la cella di destra.
potrei aggiungere un nuovo metodo per UIImageView + WebCache:
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(void (^)(UIImage *image, NSInteger row))success failure:(void (^)(NSError *error))failure;
{
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
}
Ma se lo faccio, ottengo un errore qui:
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
Perché ora il successo non è di tipo (void (^)(UIImage *image))
Sai come posso risolvere questo problema?
Grazie, ma non capisco il tuo codice, mi dispiace. – VansFannel
Si crea un contesto immagine usando 'UIGraphicsBeginImageContext' e quindi si disegna l'immagine originale ingrandita in modo da riempire l'intero contesto ma la parte in alto a sinistra dell'immagine è a (0 | 0). –