iOS - UIPinchGestureRecognizer и UIPanGestureRecognizer - Сброс
В моем приложении для масштабирования и панорамирования я использую вышеупомянутые распознаватели жестов. Это работает нормально. Я хочу кнопку, которая вернет изображение в исходное состояние. Это означает показать фактическое изображение или восстановить исходное состояние. Может кто-нибудь сказать мне, как этого добиться?
Код как ниже:
-(void)handlePanGesture:(UIPanGestureRecognizer*)recognizer
{
CGPoint translation = [(UIPanGestureRecognizer*)recognizer translationInView:[self superview]];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
[(UIPanGestureRecognizer*)recognizer setTranslation:CGPointMake(0, 0) inView:[self superview]];
}
-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
static CGRect initialBounds;
if (recognizer.state == UIGestureRecognizerStateBegan)
{
initialBounds = self.bounds;
}
CGFloat factor = [(UIPinchGestureRecognizer *)recognizer scale];
CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor);
self.bounds = CGRectApplyAffineTransform(initialBounds, zt);
}
1 ответ
Основано на комментарии @borrden.
- Проверьте, совпадают ли текущий центр ImageView и оригинальный центр. Если нет, сбросьте центр ImageView. Вы можете добавить UIView.animation.., чтобы он выглядел хорошо.
- Измените размер imageView до исходного размера, установив для него значение CGAffineTransformIdentity. Это также может быть добавлено к UIView.animation.. в выше.
Код. Внесите изменения в соответствии с вашими потребностями.
UIView.animateWithDuration(0.2, delay: 0.0, options: .CurveEaseIn, animations: { //Move image back to center self.mainImageView.center = self.originalCenter! self.layoutIfNeeded() //Resize image to original self.mainImageView.transform = CGAffineTransformIdentity }, completion: nil )