UIImageView, setClipsToBounds и то, как мои изображения теряют голову

Я разрабатываю приложение для iOS 4.

Я использую этот код в UIImageViewв UITableViewCell:

cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];

Мои изображения больше в высоту, чем в ширину, и когда я устанавливаю UIViewContentModeScaleAspectFill, изображения масштабируются по ширине с шириной UIImageView. При этом изображение становится больше, чем UIImageView, и я вижу его вне UIImageView.

Затем мне нужно использовать setClipsToBounds:YES, чтобы этого не допустить, но теперь все мои изображения теряют смысл.

Есть ли способ использовать UIViewContentModeScaleAspectFill и центрировать верхний левый угол изображения с верхним левым UIImageViewуглом? Если мне нужно потерять часть имиджа, я предпочитаю лишиться ног, а не головы.

ОБНОВЛЕНИЕ

Я использую фреймворк sdWebImageи использовал ответ Вадима Елагина, и теперь это мой код:

[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];

Мне нужно дождаться загрузки всех изображений и перезагрузить перемещение по UITableView чтобы увидеть правильное изображение в правой ячейке (это потому, что изображения кешируются и загружаются быстрее).

Вместо использования cell.photo.frameи cell.photo.imageмне нужно перейти к блоку indexPath.row, чтобы получить нужную ячейку.

Я мог бы добавить новый метод в 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];
}

Но если я это сделаю, я получу ошибку здесь:

[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];

Потому что теперь успех не имеет типа (void (^)(UIImage *image))

Вы знаете, как я могу решить эту проблему?

11
задан VansFannel 28 March 2012 в 16:55
поделиться