2016-05-26 2 views
1

Когда я пытаюсь повернуть вид в iOS, его координаты изменились.Поворот на вид 90 градусов iOS

Я хочу повернуть прямоугольник на 90 градусов, но моя проблема в том, что вид не находится в его рамке правильно после поворота.

self.frame = CGRectMake(0, 0, screenWidth, screenHeight); 
    NSLog(@"BEFORE %@", NSStringFromCGRect(self.frame)); 

self.transform = CGAffineTransformMakeRotation(M_PI_2); 

NSLog(@"AFTER %@", NSStringFromCGRect(self.frame)); 

здесь Записывать

 BEFORE {{0, 0}, {414, 636}} 
    AFTER {{-161, 160.99999999999997}, {636, 414}} 

U можно увидеть, что X и Y координаты изменились, это приводит мнение, что наборы неправильно по своей емкости. Я не могу понять формулу их изменения, которую нужно учитывать при настройке рамки.

+0

проблема с опорными точками [здесь] (https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/CoreAnimationBasics/CoreAnimationBasics.html) является руководством по опорным точкам –

+0

i хочу, чтобы я помнил эти правила тригонометрии! – Alok

+0

проверить с помощью свойства bounds в соответствии с яблоком https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instp/UIView/frame – Alok

ответ

0

У меня есть приложение, в котором я поворачиваю представление (myView) точно так, как вы хотите. Я делаю это:

#define DegreesToRadians(x) ((x) * M_PI/180.0) 
CGRect rect = myView.frame; 
myView.transform = CGAffineTransformMakeRotation(DegreesToRadians(-90)); 
myView.frame = CGRectMake(
    rect.origin.x, 
    rect.origin.y, 
    rect.size.height, 
    rect.size.width // notice that Width and height are interchanged 
    ); 

Помните, что при повороте зрения, он будет вращаться вокруг своего происхождения, а не вокруг его центра. Поэтому вам необходимо вычислить новое происхождение и размер представления после его поворота в соответствии с вашими потребностями.

Или просто повторите правильную исходную точку и ширину/высоту, которую вы сохранили в «rect», как и я.

0

использовать Try оценки в надлежащем порядке:

self.frame = CGRectMake(0, 0, screenWidth, screenHeight); 
    NSLog(@"BEFORE %@", NSStringFromCGRect(self.frame)); 

self.transform = CGAffineTransformMakeRotation(M_PI_2); 


self.frame = CGRectMake(0, 0, 
    CGRectGetWidth(self.bounds), 
    CGRectGetHeight(self.bounds)); 
NSLog(@"AFTER %@", NSStringFromCGRect(self.frame)); 

Надеется, что это помогает !!

+0

Не работает –