Как увеличить, сохранив предыдущее вращение, как есть? - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть imageView, к которому я добавил UIPinchGestureRecognizer и UIRotationGestureRecognizer.

в жесте повышения, я преобразую и масштабирую представление, а в жесте вращения применяю преобразование вращения к нему.

Проблема в том, когда я поворачиваю imageView, а затем начинаю масштабирование.Масштабирование всегда начинается с нормального состояния.

Итак, что я хочу, так это когда я поворачиваю его на 30 градусов по часовой стрелке, а затем увеличиваю.он должен увеличиваться, оставаясь на 30 градусов по часовой стрелке.

Вот код:

- (void)viewDidLoad{
    [super viewDidLoad];

//setting up the image view

mTotalRotation = 0.0;
self.imageView.image = self.photo;
self.imageView.userInteractionEnabled = YES;

UIRotationGestureRecognizer *twoFingersRotate = 
[[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersRotate:)] autorelease];
[self.imageView addGestureRecognizer:twoFingersRotate];

UIPinchGestureRecognizer *pinchGesture = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchZoom:)] autorelease];
[self.imageView addGestureRecognizer:pinchGesture];

// Do any additional setup after loading the view from its nib.
}
// Rotation gesture handler
- (void)twoFingersRotate:(UIRotationGestureRecognizer *)recognizer 
{


if ([recognizer state] == UIGestureRecognizerStateEnded) {

    mTotalRotation += recognizer.rotation;
    return;
}

self.imageView.transform = CGAffineTransformMakeRotation(mTotalRotation + recognizer.rotation);         


}


   // Pinch Gesture

   -(void)pinchZoom:(UIPinchGestureRecognizer*)recognizer{


    self.imageView.transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale) ;



}

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Изменить строку:

self.imageView.transform = CGAffineTransformMakeRotation(mTotalRotation + recognizer.rotation);

с:

self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, recognizer.rotation);

И строка:

self.imageView.transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale);

с:

self.imageView.transform = CGAffineTransformScale(self.imageView.transform, recognizer.scale, recognizer.scale);

Редактировать

Чтобы ограничить масштаб, вы можете сделать следующее:

CGAffineTransform transform = self.imageView.transform;
float newScale = recognizer.scale * sqrt(transform.a*transform.a + transform.c*transform.c);
if (newScale > scaleLimit) {
    self.imageView.transform = CGAffineTransformScale(transform, recognizer.scale, recognizer.scale);
}
0 голосов
/ 24 февраля 2012

Может быть, вы могли бы иметь свой масштаб и вращающийся вид как подпредставление вида, который вы увеличиваете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...