2015-06-23 3 views
1

Я использовал следующий код, чтобы повернуть текст меткиКак вращать UILabel относительно верхнего левого угла в прошивкой

mylabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)) 

это будет работать. Но он повернет UILabel в центре.

let say Мой верхний левый угол UILabel есть (10,10), когда я поворачиваю его. Верхний левый угол не должен меняться (точно так же, как радиус или круг).

Как я могу повернуть его относительно верхнего левого угла?.

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

Edit:

здесь код

var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2); 
    var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_4)); 
    var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2); 


mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB); 


    var transform = transA 
    mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform) 

EDIT Вопрос: как сделать мой Ярлык выглядеть как радиус круга. то есть i может вращать его 360 относительно начала координат?

+0

Просто быстрый вопрос для вас, так что вы в основном хотят, чтобы повернуть UILabel с позиции он находится в то время как верхний левый угол (10,10) или вы хотите повернуть его так, чтобы он оставался относительно верхнего левого угла вашего дисплея (если вы вращаетесь, верхний левый угол больше не будет в верхнем левом углу) –

+0

Я хочу повернуть его так, чтобы он остается относительно верхнего левого угла –

+0

Вы уверены, что этикетка имеет правильные ограничения? Ваш код, похоже, работает на меня –

ответ

3

Есть две вещи, которые вы можете сделать по этому поводу.

A)

Вы можете изменить точку привязки ярлыка:

mylabel.layer.anchorPoint = CGPointMake(0,0); // This will set the anchor point to the top left 

Теперь вы можете вращаться вокруг этой точки. Это изменит опорную точку для ВСЕХ преобразований!

B)

Вы могли бы сделать что-то вроде этого:

CGAffineTransform transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2); 
CGAFfineTransfrom rotation = CGAffineTransformMakeRotation(M_PI_2); 
CGAffineTransform transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2); 
mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB); 

Это не изменит вашу точку привязки и, следовательно, не влияют на другие преобразования!

(Если вращение неправильно, то, возможно, придется изменить transA против transB)

UPDATE

Если вы хотите, чтобы «держать» вращение (как просили в комментариях), вы можете просто сделать это:

CGAffineTransform transform = ... // Put the transform here that you used in A) or B) 

mylayer.transfrom = CGAffineTransfromConcat(mylayer.transform,transform); 

Таким образом, вы просто сказать: 'где бы' я был раньше - повернуть 90 (или 45) градусов больше

UPDATE 2

Ваш код должен выглядеть следующим образом:

var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2); 
var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2)); 
var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2); 


var transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB); 

mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform) 
+0

его работы. может у меня сказать, как я могу добиться вращения, как 45, 90. Как 45 работает, но когда я нажму снова, это не станет 90 –

+0

Я добавил код, который вы просили в обновлении –

+0

, он не будет обновлять –

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