Главный вид поворачивается от центральной точки на 360 градусов, но внутренние виды также вращаются - PullRequest
4 голосов
/ 30 июля 2011

Rotation of MainView and Inner views are added Check saturn image added, Saturn image rotated Original Saturn image, I want to add image as it is onto main view

Я вращаю основной вид на 360 градусов, и у меня есть подпредставления, добавленные в главный вид, все работает правильно, но с одной проблемой.

Что я хочу сделать, так это когда я поворачиваю основной вид, внутренние виды не должны терять свои рамки / положение. Прямо сейчас, когда я поворачиваю основной вид с подсчетом повторов infinte и динамически, если я добавляю подпредставление внутри основного вида, он переходит в правильное положение, но не сохраняет свой кадр.

Например, я внедряю орбиту, и для этого я использовал весь прозрачный вид, поскольку орбита и орбита вращаются от центральной точки до 360 градусов бесконечные времена, и Пользователь может добавлять на планету много планет, сколько он хочет, поэтому, когда планеты добавлены на орбиту, планеты не сохраняют свою рамку. Можете ли вы предложить какую-либо идею?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 08 августа 2011

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

CAKeyframeAnimation* animation;
animation = [CAKeyframeAnimation animation];    
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL,imgview.layer.position.x,imgview.layer.position.y);

int p =  [self getblank:tag];
float f = 2.0*M_PI  - 2.0*M_PI *p/PHOTONUM;
float h = f + 2.0*M_PI *num/PHOTONUM;
float centery = self.view.center.y;
float centerx = self.view.center.x;
float tmpy =  centery + RADIUS*cos(h);
float tmpx =    centerx - RADIUS*sin(h);
imgview.center = CGPointMake(tmpx,tmpy);

CGPathAddArc(path,nil,self.view.center.x, self.view.center.y,RADIUS,f+ M_PI/2,f+ M_PI/2 + 2.0*M_PI *num/PHOTONUM,0);    
animation.path = path;
CGPathRelease(path);
animation.duration = TIME;
animation.repeatCount = 1;
animation.calculationMode = @"paced";   
return animation;
1 голос
/ 30 июля 2011

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

0 голосов
/ 10 августа 2011

Я полагаю, у вас есть сохраненная переменная, которая представляет вращение "мира", правильно? Если нет, вам следует.

Затем для каждого добавляемого изображения также сохраняйте переменную, которая представляет его поворот в мир.

Например, если ваш мир повернут на 180 °, и вы добавили чашку (которую вы хотите показывать правой стороной вверх, когда мир перевернут), смещение чашки по отношению к вращению мира будет равно -180 °.

Тогда, если мир повернут на 180 ° и вы поворачиваете его, добавляя 90 °, то новым значением вращения чашки будет cup_rotate_offset + world_rotation или 180 ° + 270 °, что равносильно тому, чтобы сказать 90 °, и вершина мира была бы направлена ​​налево, и вершина чашки была бы направо.

Вы должны независимо отслеживать значения смещения для каждого добавленного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...