UIimageView вращается вокруг точки - PullRequest
1 голос
/ 09 ноября 2010

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

Compass2.layer.anchorPoint= CGPointMake(0.5,1);
[Compass2 setTransform:CGAffineTransformMakeRotation(XXXX)];

Однако он показывает Доступ к неизвестному компоненту свойства achorPoint. Может кто-нибудь дать мне несколько решений

Ответы [ 4 ]

3 голосов
/ 09 ноября 2010

Что ж, CGAffineTransform - это просто матрица, описывающая вращение, перемещение и масштабирование.

Помните, что вы можете использовать

CGAffineTransform CGAffineTransformConcat ( CGAffineTransform t1, CGAffineTransform t2 );

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

Итак, поскольку вы знаете, что стандартное вращение вращается вокруг центра UIImageView, вы можете разбить свою задачу на 3 части,

  1. двигаясь в точку вращения
  2. вращаться
  3. двигаться назад

и связывать их.

CGAffineTransform t = imageView.transform;
CGPoint p = rotationPoint - imageView.center;
imageView.transform = CGAffineTransformTranslate(
CGAffineTransformRotate( CGAffineTransformTranslate(t, p.x, p.y), angle) , -p.x, -p.y);

Я не сделалпротестируйте этот код, но вы должны найти решение по этому пути.

РЕДАКТИРОВАТЬ: я также понял, что я не использовал объединение.Вам нужно использовать объединение, если вы используете "CGAffineTransformMake ...".Я просто помещаю функции друг в друга.

2 голосов
/ 15 марта 2011

У меня была такая же проблема. Как указано в aBitObvious, необходимо импортировать инфраструктуру QuartzCore для доступа к свойству anchorPoint класса CALayer.

#import <QuartzCore/QuartzCore.h>
0 голосов
/ 11 мая 2011

Возможно, вы не сможете получить доступ к свойству anchorPoint для вашего просмотра, просто импортировав

#import <QuartzCore/QuartzCore.h>

т.е.;

Compass2.layer.anchorPoint= CGPointMake(0.5,1);

Для этого вам нужно написать следующую инструкцию импорта вначало файла реализации.

#import <QuartzCore/CALayer.h> 

Теперь вы сможете написать следующий код без каких-либо ошибок.

Compass2.layer.anchorPoint= CGPointMake(0.5,1);
0 голосов
/ 09 ноября 2010

Ошибка, которую она дает вам, подразумевает, что вы пытаетесь установить свойство, которое не существует.Вы неправильно написали 'anchorPoint'?Если это не так, и ваш вопрос просто опечатка, дважды проверьте ваши типы.Ваш 'Compass2' должен быть своего рода UIView, а его 'layer' должен быть объектом CALayer.

...