2015-08-24 4 views
0

Ну, это кажется легким, но я уже часами пытаюсь это сделать. Я пытаюсь разработать круговое управление с изображением и поворачивать управление, точно так же как управление громкостью большого звукового оборудования. Затем, чтобы повернуть изображение, я использую UIPanGestureRecognizer и ATAN2.Как повернуть изображение с помощью UIPanGestureRecognizer

Используя центр изображения, как координаты 0,0, а также источник и размер изображения для измерения области действия. После вычисления угла с X и Y из центра изображения (мой 0,0). Если Touch выходит за границы изображения, ничего не делайте, но если внутри изображения, я хочу повернуть его, но все равно не работаю. EDIT: Я не хочу использовать два пальца в этой процедуре, мне нужно использовать только один палец.

UIRotateGestureRecognizer использует два устройства и может принимать такой путь здесь.

Вот мой код:

@property (strong, nonatomic) IBOutlet UIImageView *myMainIndicatorRoulett; 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 

     UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanWithGestureRecognizer:)]; 
     [self.myTestView addGestureRecognizer:panGestureRecognizer]; 

     _myMainIndicatorRoulett.image = [TheColoristImages imageOfColorIndicatorWithIndicatorAngle:(CGFloat)90.0]; 

    } 



-(void)handlePanWithGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer 
    { 
     double a1; 
     double a2; 

     a1 = [panGestureRecognizer locationInView:self.view].x; 
     a2 = [panGestureRecognizer locationInView:self.view].y; 

     double b1; 
     double b2; 

     b1 = _myMainIndicatorRoulett.frame.origin.x; 
     b2 = _myMainIndicatorRoulett.frame.origin.y; 

     double c1; 
     double c2; 

     c1 = b1 + _myMainIndicatorRoulett.frame.size.width; 
     c2 = b2 + _myMainIndicatorRoulett.frame.size.height; 

     if ((a1 > b1) && (a1 < c1) && (a2 > b2) && (a2 < c2)) 
     { 
      double Cx; 
      double Cy; 
      Cx = _myMainIndicatorRoulett.center.x; 
      Cy = _myMainIndicatorRoulett.center.y; 

      double Tx; 
      double Ty; 
      Tx = [panGestureRecognizer locationInView:self.view].x - Cx; 
      Ty = [panGestureRecognizer locationInView:self.view].y - Cy; 
      double myAngle = atan2(Ty, Tx); 

      _myMainIndicatorRoulett.transform = CGAffineTransformRotate(_myMainIndicatorRoulett.transform, myAngle * 3.14/180); 
     } 
    } 
+0

Почему вы не используете 'UIRotationGestureRecognizer'? Это сделает вещи очень простыми. – Desdenova

+0

Что я хочу сделать, это процедура вращения одним пальцем, а не двумя, чтобы использовать iPhone одной рукой. Для других вещей использовать два пальца было бы легко, но здесь лучше всего один, и именно поэтому я так много борюсь. У тебя есть идея? –

+0

Объясните, что делает ваш код неправильно. – Wain

ответ

2

Ваша проблема в последней строке:

_myMainIndicatorRoulett.transform = CGAffineTransformRotate(_myMainIndicatorRoulett.transform, myAngle * 3.14/180); 

При использовании CGAffineTransformRotate (s, а), добавляет, что угол, не установлен Это. Вот почему это сходит с ума. Каждый раз, когда вы вызываете эту функцию, она добавляет градусы «myAngle» к вращению, что делает его похожим на вращение. Вы хотите установить угол.

Вы хотите использовать это:

_myMainIndicatorRoulett.transform = CGAffineTransformMakeRotation(myAngle); 
+1

Я не понимал разницы, и теперь работает как шарм! –

Смежные вопросы