UIKit будет вызывать ваш метод селектора много раз для одного пользовательского жеста (щипка). Каждый вызов будет представлять небольшое увеличение (или уменьшение) шкалы. Если вы будете обрабатывать каждый вызов метода и соответствующим образом масштабировать изображение для каждого небольшого приращения, вы получите плавную анимацию.
Вы используете свойство масштаба распознавателя, чтобы изменить свое изображение. Затем вы сбрасываете свойство на 1,0, чтобы при следующем вызове метода селектора свойство масштаба представляло только новое небольшое приращение с момента последнего. Вы снова масштабируете изображение с новым небольшим приращением и сбрасываете значение до 1.0. Если вы не сбросите масштаб распознавателя и не используете его для повторного масштабирования изображения, вы будете масштабировать свое изображение в соответствии с кумулятивным изменением, что приведет к скачкообразному поведению (и неправильному масштабированию).
Итак, не забудьте сбросить масштаб распознавателя жестов до 1. Чтобы отслеживать общее изменение масштаба, вы можете создать переменную экземпляра, возможно, также называемую «масштабом», для вашего UIImageView или вашего ViewController. (На самом деле, если вы использовали эту новую переменную масштаба в drawRect для рисования изображения, вам нужно будет только добавить вызов setNeedsDisplay в сеттере. И вам не нужно будет писать код для перерисовки изображения при изменении масштаба. .)
В любом случае следующий код (включая проверку предела Рэвина, но с новой переменной масштаба) должен работать для вашего метода селектора:
- (void)pinch:(UIPinchGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateChanged ||
recognizer.state == UIGestureRecognizerStateEnded) {
if (imageView.scale < yourScaleLimit) {
imageView.scale *= recognizer.scale;
//any other code to scale up the image if
//just changing imageView.Scale is not enough
}
recognizer.scale = 1.0;
}
}
Я надеюсь, что это полезно.
person
salo.dm
schedule
13.04.2011