UIimageView вращается вокруг точки

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

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

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


person Jessesiu    schedule 09.11.2010    source источник
comment
Вы сделали #import <QuartzCore/QuartzCore.h>?   -  person    schedule 09.11.2010


Ответы (4)


Что ж, 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 ...», вам необходимо использовать конкатенацию. Я просто накладываю функции друг на друга.

person Bersaelor    schedule 09.11.2010

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

#import <QuartzCore/QuartzCore.h>
person daveMac    schedule 15.03.2011

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

person Tozar    schedule 09.11.2010

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

#import <QuartzCore/QuartzCore.h>

ie;

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

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

#import <QuartzCore/CALayer.h> 

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

Compass2.layer.anchorPoint= CGPointMake(0.5,1);
person Rupesh R Menon    schedule 11.05.2011