Можно ли установить положение изображения 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;