Можно ли установить положение изображения UIImageView? - PullRequest
16 голосов
/ 02 апреля 2009

У меня есть UIImageView, который показывает увеличенное изображение. Кажется, что это по центру, но я бы хотел переместить это изображение внутрь этого UIImageView. Я посмотрел на образец MoveMe от Apple, но не мог понять, как они это делают. Кажется, у них даже нет UIImageView для этого. Есть идеи?

Ответы [ 6 ]

24 голосов
/ 08 апреля 2014

Вам нужно что-то вроде (например, показ 30% на 30% в левом верхнем углу исходного изображения):

imageView.layer.contentsRect = CGRectMake(0.0, 0.0, 0.3, 0.3);

Описание "contentsRect": Прямоугольник в единичном координатном пространстве, определяющий часть содержимого слоя, которую следует использовать.

19 голосов
/ 02 апреля 2009

Оригинальный ответ был заменен CoreAnimation в iOS4.

Так как Gold Thumb говорит: вы можете сделать это, открыв CALayer UIView. Конкретно его содержаниеRect:

Из Apple Docs : прямоугольник в единичном координатном пространстве, который определяет часть содержимого слоя, которая должна использоваться. Animatable.

12 голосов
/ 03 апреля 2009

Вы хотите отобразить изображение так, чтобы оно содержалось в UIImageView ? В этом случае просто измените contectMode для UIImageView на UIViewContentModeScaleToFill (если соотношение сторон несущественно) или UIViewContentModeScaleAspectFit (если вы хотите сохранить соотношение сторон)

В IB это можно сделать, установив режим в Инспекторе.

В коде это можно сделать как

yourImageView.contentMode = UIViewContentModeScaleToFill;

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

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

4 голосов
/ 03 апреля 2009

Не похоже, что сэмпл MoveMe делает что-то вроде того, что вы хотите. Размер PlacardView в нем соответствует размеру используемого изображения. Единственное изменение размера, которое было сделано, это преобразование вида, которое не влияет на область просмотра изображения. Насколько я понимаю, у вас есть большая картинка, и вы хотите показать в ней маленькую область просмотра. Для этого не существует простого метода класса, но есть функция, которую можно использовать для получения желаемых результатов: CGImageCreateWithImageInRect (CGImageRef, CGRect) поможет вам.

Вот краткий пример его использования:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);
3 голосов
/ 03 апреля 2009

Спасибо большое. Я нашел довольно простое решение, которое выглядит так:

CGRect frameRect = myImage.frame;
CGPoint rectPoint = frameRect.origin;
CGFloat newXPos = rectPoint.x - 0.5f;
myImage.frame = CGRectMake(newXPos, 0.0f, myImage.frame.size.width, myImage.frame.size.height);

Я просто перемещаю кадр. Бывает, что части этого кадра выходят из порта просмотра iPhone, но я надеюсь, что это не будет иметь большого значения. Над ней есть маска, поэтому она не выглядит странно. Пользователь не понимает, как это делается.

0 голосов
/ 10 апреля 2012

Вы можете сделать то же самое по:

UIImageView *imgVw=[[UIImageView alloc]initwithFrame:CGRectMake(x,y,height,width)];     
imgVw.image=[UIImage imageNamed:@""];
[self.view addSubView imgVw];
imgVw.contentMode = UIViewContentModeScaleToFill;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...