UIKit будет многократно вызывать ваш метод выбора для одного пользовательского жеста (пинч.) Каждый вызов будет представлять небольшое увеличение (или уменьшение) в масштабе.Если вы обрабатываете каждый вызов метода и соответственно масштабируете свое изображение для каждого небольшого приращения, вы получите плавную анимацию.
Вы используете свойство масштаба распознавателя для изменения изображения.Затем вы сбрасываете свойство в 1.0, чтобы при следующем вызове метода селектора свойство scale представляло только новый небольшой шаг с момента последнего.Вы снова масштабируете свое изображение с новым небольшим приращением и сбрасываете до 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;
}
}
Надеюсь, это полезно.