2013-06-14 2 views
0

У меня есть простой поворотный жест, реализованный в моем коде, но проблема заключается в том, что я поворачиваю изображение, которое оно выводит из экрана/из вида всегда вправо.Вращающийся UIImageView перемещает изображение с экрана

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

Хотелось бы, чтобы он вращался вокруг текущего центра, но по какой-то причине он менялся. Любые идеи, что вызывает это?

код ниже:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CALayer *l = [self.viewCase layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:30.0]; 

    self.imgUserPhoto.userInteractionEnabled = YES; 
    [self.imgUserPhoto setClipsToBounds:NO]; 

    UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationDetected:)]; 
    [self.view addGestureRecognizer:rotationRecognizer]; 

    rotationRecognizer.delegate = self; 
} 

- (void)rotationDetected:(UIRotationGestureRecognizer *)rotationRecognizer 
{ 
    CGFloat angle = rotationRecognizer.rotation; 
    self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, angle); 
    rotationRecognizer.rotation = 0.0; 
} 
+0

Если вы хотите повернуть вокруг центра изображения, вам нужно убедиться, что центр изображения совпадает с исходным кодом системы координат. Система координат для представления имеет начало в верхнем левом углу. Итак, для начала вам нужно перевести изображение в исходное положение, повернуть его, а затем переместить обратно в исходный центр. Я еще не писал этот код в iOS, поэтому не знаю точной семантики, но я очень уверен, что это ваша проблема. – zambrey

+0

Вы должны просто искать поворот изображения вокруг произвольной точки в iOS. Похоже, что это так много, как и другие блоги. – zambrey

+0

это может помочь: http://stackoverflow.com/a/5983173/210171 «Поворот контекста изображения (CGContextRotateCTM), заставляющий его стать пустым. Почему?» – nielsbot

ответ

1

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

self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, self.imageView.bounds.size.width/2, self.imageView.bounds.size.height/2); 

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

Надеется, что это помогает

Edit:

Чтобы быстро ответить на ваш вопрос, что вы должны сделать, чтобы отменить Перевести Transform, чтобы вычесть ту же разницу вы добавляете к нему в первую очередь, например:

// The next line will add a translate transform 
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 10, 10); 
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, radians); 
// The next line will undo the translate transform 
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, -10, -10); 

Однако после создания this quick project я понял, что, когда вы применить преобразование поворота с помощью UIKit (как кстати вы, видимо, делают это) гниль на самом деле происходит вокруг центра. Только при использовании CoreGraphics вращение происходит вокруг начала координат. Так что теперь я не уверен, почему ваше изображение уходит с экрана. В любом случае, взгляните на проект и посмотрите, поможет ли вам какой-либо код.

Дайте мне знать, если у вас есть еще вопросы.

Изображение «Firefox» нарисовано с использованием UIKit. Синий прямоугольник рисуется с использованием CoreGraphics The 'Firefox' image is drawn using UIKit. The blue rect is drawn using CoreGraphics

+0

Как мне отменить Трансформацию? –

+0

@Robert Swilley см. Мой обновленный ответ – LuisCien

0

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

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