UIImageView изменить ширину и высоту - PullRequest
14 голосов
/ 14 июня 2009

Я читал различные посты здесь, задавая похожие вопросы ... Я пробовал различные способы, которые были опубликованы, включая границы и рамки и т. Д., Включая следующие:

myImage.frame = CGRectMake(0.0f, 0.0f,50.0f, 50.0f);

и

myImage.bounds = CGRectMake(0.0f, 0.0f,50.0f, 120.0f);

ни одна из этих работ.

Однако мне интересно, что следующий код позволяет мне перемещать изображение, но не меняет ширину:

CGRect frameRect = myImage.frame;
frameRect.size.width = 50.0f;
frameRect.origin.x += 10.5f;
myImage.frame = frameRect;

Так почему же ни один из них не меняет ширину / высоту моего ImageView?

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

Как этот: UIImage: изменить размер, затем обрезать

конечно, это проще, чем это *

Ответы [ 8 ]

26 голосов
/ 28 октября 2010

Следующее изменит размер UIImaveView, обрезая нижележащее изображение без изменения его размера и выравнивая по левому нижнему углу вида:

imageView.frame = CGRectMake(
             imageView.frame.origin.x, 
             imageView.frame.origin.y, newWidth, newHeight);

imageView.contentMode = UIViewContentModeBottomLeft; // This determines position of image
imageView.clipsToBounds = YES;
11 голосов
/ 15 июня 2009

Во-первых, вы не можете установить рамку или границы UIImage - это будет работать только на UIImageView.

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

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

UIImage *myImage = [UIImage imageNamed:@"photo.png"];

CGRect cropRect = CGRectMake(0.0, 0.0, 320.0, 44.0));
CGImageRef croppedImage = CGImageCreateWithImageInRect([myImage CGImage], cropRect);

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:cropRect];
[myImageView setImage:[UIImage imageWithCGImage:croppedImage]]; 

CGImageRelease(croppedImage);
3 голосов
/ 04 января 2013

Что ж, если вы прочитали документацию по UIIMage, вы можете заметить, что невозможно изменить какой-либо параметр UIImage после его создания, решение, которое я реализовал для использования высококачественных изображений для изменения какого-либо параметра (например) SliderControl as Screw Image, следующий:

UIImage *tumbImage= [UIImage imageNamed:@"screw.png"];
UIImage *screw = [UIImage imageWithData:UIImagePNGRepresentation(tumbImage) scale:2];

С этим я могу использовать изображение 100x100 px в своих приложениях, масштабированное до 50%.

С уважением.

3 голосов
/ 25 августа 2009

Исходя из того, что я понял, ОП захотел изменить размер UIImageView при изменении размера контейнера UIView. Код ниже сделает это ...

UIView * foo = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)] autorelease];
foo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
UIImageView * bar = [[UIImageView alloc] initWithImage:
                     [UIImage imageNamed:@"test.png"]];
bar.autoresizingMask = foo.autoresizingMask;
[foo addSubview:bar];
[self.view addSubview:foo];

Ключом здесь является foo.autoresizingMask = UIViewAutoresizingF FlexibleWidth | UIViewAutoresizingF FlexibleHeight и bar.autoresizingMask = foo.autoresizingMask; строк. Забудьте об этом, и весь джигмарол перестанет работать.

1 голос
/ 01 октября 2016

Если вы пытались, чтобы эти методы не работали, единственный способ сделать это - добавить ограничение ширины и высоты в UIImageView.

// Create the constraint in code
NSLayoutConstraint *constraint0 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0f constant: yourNewsWidth];


NSLayoutConstraint *constraint1 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0f constant: yourNewsHeight];

[myImage addConstraint:constraint0];
[myImage addConstraint:constraint1];
1 голос
/ 25 августа 2010

Попробуйте использовать UIScrollView. Добавьте UIImageView к UIScrollView в Интерфейсном Разработчике, после чего вы можете контролировать положение и размер изображения следующим образом:

    CGRect rect = [scrollView frame];

    rect.origin.x = 50.0f;
    rect.origin.y = 0.0f;
    rect.size.width = 320.0f;
    rect.size.height = 150.0f;

    [scrollView setFrame:rect];
0 голосов
/ 14 июня 2009

Используйте myImageView.frame = myNewPosAndSize;, чтобы изменить размер или изменить положение вашего изображения (как и в любом другом виде). Вас может сбить с толку тот факт, что представление изображения рисует свое изображение с исходным размером, возможно, превышающим его собственные размеры. Чтобы отключить это использование myImageView.clipsToBounds = NO;

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

Вам не нужно писать целую книгу, вы можете скопировать этот код.

Я считаю, что UIImageView всегда рисует изображение в 0,0 в масштабе 1,0. Вам нужно изменить размер изображения, если вы хотите продолжить использовать UIImageView.

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