如何使用view.frame和view.center居中两个视图

时间:2011-09-12 21:29:14

标签: ios animation

我正在尝试做一些非常基本的事情。我正在使用基于块的UIView动画将当前离开屏幕的子视图带到当前视图的中心。显然sp.view.frame = self.view.center行是问题所在。最后,我该怎么做我想要的?

[UIView animateWithDuration:1 delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
    sp.view.frame = self.view.center;        
}

谢谢!

3 个答案:

答案 0 :(得分:16)

首先,sp.view.frame返回CGRect,而self.view.center返回CGPoint。这两个不是同一类型,因此不能设置为另一个。假设您希望将sp.view的中心设置为self.view的中心,您可以通过以下两种方式之一来实现:

sp.view.center = self.view.center;

[sp.view setCenter:self.view.center];

答案 1 :(得分:9)

self.view.center

是一个CGPoint结构。

sp.view.frame

是一个CGRect结构。

您不能将CGPoint分配给CGRect,因为类型不同。

如果您想将子视图居中,请使用类似的内容,假设sp.viewself.view的子视图:

sp.view.frame = CGRectMake
(
    ( self.view.frame.size.width  / ( CGFloat )2 ) - ( sp.view.frame.size.width  / ( CGFloat )2 ),
    ( self.view.frame.size.height / ( CGFloat )2 ) - ( sp.view.frame.size.height / ( CGFloat )2 ),
    sp.view.frame.size.width,
    sp.view.frame.size.height
);

修改

或者诺亚建议:

sp.view.center = CGPointMake( self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);

谢谢诺亚,顺便说一句......

答案 2 :(得分:1)

可以像这样添加一个宏 #define countmid(X,Y) (float) (X-Y)/2
然后在代码中使用它作为
float Center = countmid(VIEW.frame.size.width,SUB.frame.size.width);
将SUB视图放在VIEW的水平中心
对于垂直中心也是如此,只需使用高度与宽度