UITableViewCell imageView подходит для 40x40 - PullRequest
25 голосов
/ 28 июня 2009

Я использую одни и те же большие изображения в tableView и detailView. Необходимо сделать imageView заполненным в 40x40, когда изображения отображаются в tableView, но растянуты на половину экрана. Я играл с несколькими свойствами, но не дал положительного результата:

[cell.imageView setBounds:CGRectMake(0, 0, 50, 50)];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView setContentMode:UIViewContentModeScaleAspectFill];

Я использую SDK 3.0 со встроенной функцией «Объекты ячейки в предопределенных стилях».

Ответы [ 7 ]

32 голосов
/ 28 апреля 2011

Я поместил код Бена как расширение в мой файл NS-Extensions, чтобы я мог указать любому изображению создать его миниатюру, как в:

UIImage *bigImage = [UIImage imageNamed:@"yourImage.png"];
UIImage *thumb = [bigImage makeThumbnailOfSize:CGSizeMake(50,50)];

Вот файл .h:

@interface UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size;
@end

, а затем в файле NS-Extensions.m:

@implementation UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size
{
    UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
    // draw scaled image into thumbnail context
    [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();        
    // pop the context
    UIGraphicsEndImageContext();
    if(newThumbnail == nil) 
        NSLog(@"could not scale image");
    return newThumbnail;
}

@end
12 голосов
/ 13 октября 2009

Я кеширую уменьшенную версию, поскольку при использовании больших изображений, уменьшенных на лету, используется слишком много памяти.

Вот мой код миниатюры:

- (UIImage *)thumbnailOfSize:(CGSize)size {
    if( self.previewThumbnail )
        return self.previewThumbnail; // returned cached thumbnail

    UIGraphicsBeginImageContext(size);

    // draw scaled image into thumbnail context
    [self.preview drawInRect:CGRectMake(0, 0, size.width, size.height)];

    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();    

    // pop the context
    UIGraphicsEndImageContext();

    if(newThumbnail == nil) 
        NSLog(@"could not scale image");

    self.previewThumbnail = newThumbnail;

    return self.previewThumbnail;
}

Просто убедитесь, что вы правильно очистили кэшированную миниатюру, если изменили исходное изображение (self.preview в моем случае).

4 голосов
/ 09 сентября 2009

Я завернул мой в UIView и использую этот код:

imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;

(self - это оболочка UIView с нужными мне размерами - я использую AsyncImageView ).

2 голосов
/ 24 марта 2011

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

- (NSArray *)arrayOfThumbnailsOfSize:(CGSize)size fromArray:(NSArray*)original {
    NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[original count]];
    for(UIImage *image in original){
        UIGraphicsBeginImageContext(size);
        [image drawInRect:CGRectMake(0,0,size.width,size.height)];
        UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [temp addObject:thumb];
    }
    return [NSArray arrayWithArray:temp];
}
0 голосов
/ 03 сентября 2009

Попробуйте установить UIImageView.autoresizesSubviews и / или UIImageView.contentStretch.

0 голосов
/ 31 июля 2009

Я смог сделать эту работу, используя интерфейсный конструктор и tableviewcell. Вы можете установить свойства «Режима» для представления изображения как «Соотношение сторон». Я не уверен, как это сделать программно.

0 голосов
/ 30 июня 2009

Вы могли бы использовать это?

yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];

и / или

cell.image = yourTableViewController.rowImage;

и если ваши изображения уже 40х40, вам не нужно беспокоиться об установлении границ и прочего ... но я тоже новичок в этом, так что, я бы не знал, не играл с Таблица просмотра строк / ячеек изображений много

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...