主视图从中心点旋转到360度,但内部视图也在旋转

时间:2011-07-30 12:38:36

标签: iphone animation core-animation

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 个答案:

答案 0 :(得分:1)

听起来你需要为你在主视图中添加的每个子视图添加一个旋转动画。如果主视图顺时针旋转,则子视图将需要围绕其中心以逆时针方向旋转。

答案 1 :(得分:1)

我猜你在旋转时试图保持子视图的方向。 如果我是你,我会使用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;

答案 2 :(得分:0)

我假设你有一个代表“世界”旋转的存储变量,对吗?如果没有,你应该。

然后,对于您添加的每个图像,还会存储一个表示其向世界旋转的变量。

例如,如果您的世界旋转了180°,并且您添加了一个杯子(当世界颠倒时您想要正面朝上)杯子与世界旋转的“偏移”将是-180 °。

然后,如果世界处于180°并且你通过增加90°旋转你的世界,那么杯子的新旋转值将是cup_rotate_offset + world_rotation,或180°+ 270°,这与说90°相同,而世界之巅将面向左侧,杯顶将面向右侧。

您必须独立跟踪每个添加对象的偏移值。