Можно ли установить положение изображения UIImageView?

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

Ответы

Ответ 1

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

Так как Gold Thumb говорит: вы можете сделать это, обратившись к UIView CALayer. В частности, его contentRect:

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

Ответ 2

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

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

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

Ответ 3

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

В IB это можно сделать, установив Mode in Inspector.

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

yourImageView.contentMode = UIViewContentModeScaleToFill;

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

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

Ответ 4

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

Вот пример:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);

Ответ 5

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

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, но я надеюсь, что это не имеет большого значения. На ней есть маска, поэтому она не выглядит странной. Пользователь не пытается понять, как это делается.

Ответ 6

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

UIImageView *imgVw=[[UIImageView alloc]initwithFrame:CGRectMake(x,y,height,width)];     
imgVw.image=[UIImage imageNamed:@""];
[self.view addSubView imgVw];
imgVw.contentMode = UIViewContentModeScaleToFill;