2015-03-06 3 views
0

Я работаю над приложением, которое позволяет пользователю изменять размер и поворачивать фотографию с помощью UIGestureRecognizers. У меня есть этот код, который регулирует anchorPoint на основе которой пользователь применяет штрихи (чтобы выглядеть, как они масштабирования изображения в точке, где их пальцы на самом деле):Как центр влияния anchorPoint в UIView?

- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    UIView *gestureRecognizerView = gestureRecognizer.view; 
    CGPoint locationInView = [gestureRecognizer locationInView:gestureRecognizerView]; 
    CGPoint locationInSuperview = [gestureRecognizer locationInView:gestureRecognizerView.superview]; 

    gestureRecognizerView.layer.anchorPoint = CGPointMake(locationInView.x/gestureRecognizerView.bounds.size.width, locationInView.y/gestureRecognizerView.bounds.size.height); 
    gestureRecognizerView.center = locationInSuperview; 
} 

Позже, я м просто хочет, чтобы вычислить происхождение на основе центра и границ с этим кодом:

CGRect transformedBounds = CGRectApplyAffineTransform(view.bounds, view.transform); 
CGPoint origin = CGPointMake(view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x), view.center.y - (transformedBounds.size.height * view.layer.anchorPoint.y)); 

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

Так что в целом мне интересно, что я здесь не рассматриваю? Как anchorPoint влияет на центр так, как я не могу определить?

+1

Как и [это] (http://ronnqvi.st/about-the-anchorpoint /) –

+0

@ DavidRönnqvist - Спасибо, что было полезно –

ответ

0

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

Я полностью не проверял, но если вы делаете что-то вроде этого вы должны получить правильный кадр:

CGRect transformedBounds = 
     CGRectApplyAffineTransform(view.bounds, view.transform); 
    CGSize originOffset = CGSizeMake(
     view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x), 
     view.center.y - 
      (transformedBounds.size.height * view.layer.anchorPoint.y)); 

    transformedBounds.origin.x += originOffset.width; 
    transformedBounds.origin.y += originOffset.height; 
Смежные вопросы