Pracuję nad aplikacją iOS 4.UIImageView, setClipsToBounds i jak moje obrazy tracą głowę
Używam tego kodu w UIImageView
na UITableViewCell
:
cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];
Moje obrazy są wyższe niż szersze, a kiedy ustawić UIViewContentModeScaleAspectFill
, zdjęcia są skalowane w celu dopasowania szerokości o szerokości UIImageView. Robiąc to, obraz staje się większy niż UIImageView i widzę go poza UIImageView
.
Następnie muszę użyć setClipsToBounds:YES
, aby nie dopuścić, ale teraz wszystkie moje obrazy tracą głowę.
Czy istnieje sposób użycia UIViewContentModeScaleAspectFill i wyśrodkowania lewego górnego rogu obrazu z lewym górnym rogiem rogu UIImageView
? Jeśli potrzebuję stracić część obrazu, wolę stracić stopy niż głowę.
UPDATE
Używam sdWebImage ramy i użyłem Vadim Yelagin odpowiedź i to jest mój kod teraz:
[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];
muszę czekać, aby uzyskać wszystkie obrazy i załadowany załaduj ponownie wokół UITableView, aby zobaczyć właściwy obraz w prawej komórce (dzieje się tak, ponieważ obrazy są buforowane i ładuje się szybciej).
Zamiast używać cell.photo.frame
i cell.photo.image
muszę przejść do bloku indexPath.row
, aby uzyskać właściwą komórkę.
mogę dodać nową metodę do 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];
}
Ale jeśli to zrobię, otrzymuję komunikat o błędzie tutaj:
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
Bo teraz sukces nie jest typu (void (^)(UIImage *image))
Czy wiesz, jak mogę rozwiązać ten problem?
Dzięki, ale nie rozumiem swój kod, przepraszam. – VansFannel
Utworzono kontekst obrazu za pomocą "UIGraphicsBeginImageContext", a następnie narysowano oryginalny obraz powiększony tak, aby wypełniał cały kontekst, ale lewy górny róg obrazu znajduje się na (0 | 0). –