Как определить координаты изображения для большого обрезанного изображения в UIImageView? - PullRequest
0 голосов
/ 28 ноября 2009

Что касается iPhone SDK:

У меня есть изображение размером 512 x 512 пикселей .png, и я хочу отобразить его в формате UIImageView 200 x 200 пикселей С кадрированием (с собственным разрешением, без масштабирования, подгонки или поворота). Есть ли способ определить координаты изображения, которые видны внутри UIImageView?

Например, если изображение находится в точном центре UIImageView, то я хочу знать, каковы координаты изображения в точках (0,0) и (200 200) UIImageView, которые будут (156 156) и ( 356,356) соответственно для отображаемого изображения.

Я планирую реализовать функции панорамирования и масштабирования в какой-то момент, но я хочу знать, как решить эту проблему в первую очередь. Ссылка на класс UIImageView не показалась мне полезной ... Я надеялся избежать использования UIView, но если это необходимо, я пойду по этому пути.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2009

Спасибо за вашу помощь. Разработка функций панорамирования / масштабирования стала тривиальной после реализации UIScrollView. Реализация UIScrollView позволяет мне определять нужные мне координаты с помощью значений myScrollView.bounds.origin.x и myScrollView.bounds.origin.y ... масштабирование все еще требует вычислений - как вы сказали выше, но я сейчас на правильном пути.

вот код, который я использовал для создания UIScrollView (на основе нескольких источников, доступных в сети и на этом сайте - Apple 100 * ScrollViewSuite был особенно полезен. Вот код, который я использовал в разделе (void)viewDidLoad моей программы, надеюсь, другие найдут ее полезной:

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[imageArray objectAtIndex:0]]; //imageArray is an array/stack of images...
[self setMyImage:tempImageView]; //myImage is of type UIImageView
[myImage setTag:100]; //set this to an 'arbitrary' value so that when I update the scrollview I can remove the current image...
[tempImageView release];

myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);
myScrollView.maximumZoomScale = 10.0;
myScrollView.minimumZoomScale = 0.15;
myScrollView.clipsToBounds = YES;
myScrollView.delegate = self;

[myScrollView addSubview:myImage];
0 голосов
/ 29 ноября 2009

Вы правы относительно того, что вы видели из справочника UIImageView - нет простого способа сделать это, используя только UIImageView. Вам нужно будет принять во внимание такие вещи, как contentMode UIImageView или ограничиться вычислением позиции только для одного UIViewContentMode.

Однако, когда вы в конечном итоге доберетесь до реализации панорамирования и масштабирования, вы будете использовать UIScrollView с UIImageView в качестве подпредставления этого UIScrollView. В этот момент было бы наиболее разумно изначально изменить размер вашего UIImageView до размера любого изображения, которое вы отображаете (может быть динамическим). Затем вы можете определить, где находится изображение, определив, где находится изображение view , что вы можете сделать гораздо проще и с небольшим количеством математики.

...