Как скопировать изображение внутри UIImageView?

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

Мне кажется, что я должен просто настроить bounds.origin UIImageView , и изображение должно двигаться (потому что изображение должно рисовать внутри представления с его bounds.origin UIImageView , верно?), Но это не кажется Работа. Значение bounds.origin изменяется, но изображение рисует в том же месте.

Что почти работает, это изменить contentsRect слоя вида. Но это начинается как единичный квадрат, хотя видимая область изображения – это не весь образ. Поэтому я не уверен, как бы я обнаружил, что край изображения потянут в область видимости (чего мне нужно избегать, поскольку она отображается, растягивая край до бесконечности, который выглядит, ну, под-пар ).

У моего представления в настоящее время есть его contentsGravity kCAGravityTopLeft установлена ​​на kCAGravityTopLeft через Interface Builder, если это имеет значение (это вызывает перемещение изображения?). Однако никаких других вариантов не было лучше.

ОБНОВЛЕНИЕ: чтобы быть ясным, я хочу перемещать изображение внутри представления, сохраняя представление в том же месте.

Я настоятельно рекомендую UIImageView в UIScrollView . Пусть UIImageView отобразит полное изображение и настроит contentSize в UIScrollView таким же, как размер вашего UIImageView's . Ваше window в изображении будет размером с UIScrollView и с помощью scrollRectToVisible:animated: вы можете панорамировать в определенные области на изображении анимированным способом.

Если вы не хотите, чтобы полосы прокрутки отображались, вы можете установить showsHorizontalScrollIndicator и showsVerticalScrollIndicator свойстваVerticalScrollIndicator в NO .

UIScrollView также обеспечивает функциональность масштабирования, которая может быть или не быть полезной для вас.

Брэд Ларсон указал мне по правильной дороге, предложив включить UIImageView в UIScrollView .

В конце я поместил UIImageView внутри UIScrollView и установил размер contentSize и scraceView в том же размере, что и изображение в UIImage:

 UIImage* image = imageView.image; imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height); scrollView.contentSize = image.size; 

Затем я могу анимировать контент contentOffset для достижения приятного эффекта панорамирования:

 [UIView beginAnimations:@"pan" context:nil]; [UIView setAnimationDuration:animationDuration]; scrollView.contentOffset = newRect.origin; [UIView commitAnimations]; 

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

 UIImage* image = imageView.image; float xNewOrigin = [TCBRandom randomIntLessThan:image.size.width - scrollView.bounds.size.width]; float yNewOrigin = [TCBRandom randomIntLessThan:image.size.height - scrollView.bounds.size.height]; CGRect oldRect = scrollView.bounds; CGRect newRect = CGRectMake( xNewOrigin, yNewOrigin, scrollView.bounds.size.width, scrollView.bounds.size.height); float xDistance = fabs(xNewOrigin - oldRect.origin.x); float yDistance = fabs(yNewOrigin - oldRect.origin.y); float hDistance = sqrtf(powf(xDistance, 2) + powf(yDistance, 2)); float hDistanceInPixels = hDistance; float animationDuration = hDistanceInPixels / speedInPixelsPerSecond; 

Я использую speedInPixelsPerSecond из 10.0f , но другие приложения могут захотеть использовать другое значение.

Interesting Posts

Функция замены XSLT не найдена

Что означает символ подчеркивания и интерфейса после ключевого слова var?

Существуют ли полные примеры, которые используют все методы делегата NSURLConnection?

Установите системный часовой пояс из .NET.

Как настроить оттенок для просмотра изображений программно в android?

Sudo с паролем в одной командной строке?

Возьмите фотографию веб-камеры при входе в систему с помощью Windows 7

График зависимости проектов Visual Studio

Когда следует использовать enumerateObjectsUsingBlock vs. for

Как я могу ограничить GenericForeignKey Django списком моделей?

Нестационарный член как аргумент по умолчанию для функции нестатического члена

Как C вычисляет sin () и другие математические функции?

Почему strlcpy и strlcat считаются небезопасными?

Почему неназванное пространство имен является «превосходной» альтернативой статическому?

Что более эффективно: Словарь TryGetValue или ContainsKey + Item?

Давайте будем гением компьютера.