2010-11-09 8 views
1

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

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

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

+1

Вы сделали '#import '? – Anna

ответ

0

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

3

Ну 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); 

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

EDIT: Я также понял, что не использовал Concatenation. Вам нужно использовать конкатенацию, если вы используете «CGAffineTransformMake ...». Я просто передал функции друг другу.

2

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

#import <QuartzCore/QuartzCore.h> 
0

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

#import <QuartzCore/QuartzCore.h> 

т.е.;

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

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

#import <QuartzCore/CALayer.h> 

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

Compass2.layer.anchorPoint= CGPointMake(0.5,1); 
Смежные вопросы