2013-09-09 3 views
0

Я пытаюсь увеличить масштаб зоны, в которой я нажимаю изображение в UIImageView. Я использовал CGAffineTransformMakeScale, чтобы сделать масштаб, и я изменил imageView.layer.anchorPoint с координатами точки щелчка шкала работает, но изображение больше не находится в центре, я думаю, что ошибаюсь в координатах anchorPoint, я нашел много статей, обсуждающих об этом , но это было слишком сложноМасштаб и изменение anchorPoint

помогите пожалуйста!

Код:

-(void)gestureTapEvent:(UITapGestureRecognizer *)gesture { 
    NSLog(@"doubleclic"); 

    CGPoint touchPoint = [gesture locationInView:gesture.view]; 
    NSLog(@"Position of touch: %.3f, %.3f", touchPoint.x, touchPoint.y);  

    float newX = touchPoint.x/imageView.frame.size.width; 
    float newY = touchPoint.x/imageView.frame.size.height; 


    imageView.transform = CGAffineTransformMakeScale(1.5, 1.5); 
    imageView.layer.anchorPoint = CGPointMake(newY, newX); 
} 

ответ

3

Содержание слоя рисует сам по себе относительно точки привязки. Фактически, anchorPoint и position слоя (позиция примерно соответствует center) представляют собой ту же самую точку в двух разных системах координат: опорная точка находится в едином координатном пространстве слоя, а положение находится в суперслои координаты пространства. У меня есть довольно подробное объяснение обо всем этом in this article over at the iDeveloper blog.

Краткое решение: установите положение слоя после того, как вы установили опорную точку. Установка кадра не будет работать из-за наличия преобразования (дополнительную информацию см. В документации для свойства frame).

Другое решение (если вас раздражает позиция-якорь-танец) заключается в использовании только преобразования. Если в этом случае вы будете конкатенировать перевод, масштабируйте &, чтобы получить окончательное преобразование. Я написал примерно одно и то же, но для ротации в this article. Просто замените поворот со шкалой: D