Установить размер UIImageView?

У меня следующая проблема: я создаю подвиды UIView в UIScrollView, включая UIImageViews.

NSArray *bilder = [[NSArray alloc] initWithObjects:@"lol.jpg", @"lol2.jpg", nil];
NSArray *added = [[NSMutableArray alloc] init];
UIImageView *tmpView;

for (NSString *name in bilder) {
    UIImage *image = [UIImage imageNamed:name];
    tmpView = [[UIImageView alloc] initWithImage:image];
    tmpView.contentMode = UIViewContentModeScaleAspectFit;
    tmpView.frame = CGRectMake(0, 0, 300, 300);

    [added addObject:tmpView];

    [tmpView release];
}

CGSize framy = mainFrame.frame.size;

NSUInteger x = 0;

for (UIView *view in added) {
    [mainFrame addSubview:view];
    view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);
}

mainFrame.scrollEnabled = YES;
mainFrame.pagingEnabled = YES;
mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);
mainFrame.backgroundColor = [UIColor blackColor];

я получаю имена файлов изображений из массива. теперь я хочу изменить размер изображения до определенного размера, но это не сработает. любой совет?

спасибо + привет


person trnc    schedule 22.04.2010    source источник


Ответы (3)


В UIImage отсутствует метод setSize: из NSImage, но этот пост, кажется, добавляет метод scaleToSize: с использованием категории на UIImage.

person Isaac    schedule 22.04.2010
comment
я пробовал это, изменение размера изображения работает, но изображение остается полноэкранным. как я могу изменить размер изображения до размера измененного изображения? - person trnc; 23.04.2010
comment
Вы изменяете размер изображения перед вызовом [[UIImageView alloc] initWithImage:image]? То, как я прочитал документацию для initWithImage:, должно привести к тому, что UIImageView будет соответствовать размеру изображения. - person Isaac; 23.04.2010
comment
да, на самом деле я делаю UIImage *image = [UIImage imageNamed:name]; затем UIImage *smallImage = [масштаб изображения: CGSizeMake (100,100)]; а затем я выделяю UIIMageView с помощью tmpView = [[UIImageView alloc] initWithImage:smallImage]; но изображение сохраняется в полноэкранном режиме, проверено с помощью набора backgroundcolor! - person trnc; 23.04.2010
comment
Есть три вещи, которые я вижу в качестве возможных причин (хотя они не кажутся вероятными): 1. Вы делаете изображение 100x100, но представление изображения 300x300; 2. tmpView.contentMode = UIViewContentModeScaleAspectFit; (думаю, с UIImage scaleToSize: этого быть не должно); и 3. возможность того, что mainFrame каким-то образом несет ответственность за неправильное определение размера, когда UIImageView добавляется в качестве подкадра. Поскольку я сам ничего не делаю с UIKit/iPhone (только с AppKit/MacOSX), у меня практически нет других идей. - person Isaac; 23.04.2010
comment
О, на самом деле, еще 1 идея, чтобы попытаться изолировать проблему, если ничего другого: записать кадр UIImageView сразу после initWithImage:, сразу после tmpView.frame = ..., до и после [mainFrame addSubview:view]; и после view.frame = ... и посмотреть, дает ли это какие-либо подсказки относительно того, где вид заканчивается полноэкранным. - person Isaac; 23.04.2010

Измените tmpView.frame, чтобы использовать новый CGRect:

tmpView.frame = CGRectMake(tmpView.frame.origin.x,
                           tmpView.frame.origin.y,
                           newWidth,
                           newHeight);
person MrHen    schedule 22.04.2010
comment
ну, на самом деле это тот же код, который я использовал раньше, не так ли? тоже не работает :( - person trnc; 23.04.2010
comment
Попробуйте использовать CGRectOffset, чтобы просто переместить кадр вниз. Это должно сохранить первоначальный размер. Что-то, что также может помочь, — это временная установка цветов фона для всех представлений, чтобы убедиться, что все, кроме UIImageView, отображается там, где вы хотите. - person MrHen; 23.04.2010
comment
Попробуйте использовать [[UIImageView alloc] initWithFrame:...] и установить изображение позже. Это должно быть не влияет на рамку представления. - person Christian Schnorr; 19.07.2011

Что я вижу:

view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);

Но если вы посмотрите на CGRectMake...

Declaration: CGRect CGRectMake (
   CGFloat x,
   CGFloat y,
   CGFloat width,
   CGFloat height
);

Вы устанавливаете значение X, а не значение Y. Я ожидаю, основываясь на вашем более позднем вызове:

mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);

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

Предлагать:

view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);

to

view.frame = CGRectMake(0,framy.height * x++, framy.height, framy.width);
person gnasher    schedule 22.04.2010
comment
это ландшафтный режим, они отображаются рядом, но в полноэкранном режиме. но я не хочу полноэкранный, я хочу 300x300! - person trnc; 23.04.2010
comment
Затем это приводит меня к: mainFrame.contentSize = CGSizeMake(framy.height * [добавленный счетчик], framy.width); Разве вы не хотите: mainFrame.contentSize = CGSizeMake(framy.height, framy.widtht * [добавлено количество]; - person gnasher; 23.04.2010