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

Ios 如何使用view.frame和view.center使两个视图居中,ios,animation,Ios,Animation,我正在尝试做一些基本的事情。我正在使用基于块的UIView动画将当前不在屏幕上的子视图带到当前视图的中心。显然,sp.view.frame=self.view.center行是这里的问题。最后,我怎么做我想做的 [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ sp.view.fr

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

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

谢谢

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

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

是一个CGPoint结构

sp.view.frame
是一个CGRect结构

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

如果要将子视图居中,请使用类似的方法,假设
sp.view
self.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);

谢谢Noah,顺便说一句。

可以添加这样的宏
#定义countmid(X,Y)(float)(X-Y)/2

然后在代码中使用它作为
float Center=countmid(VIEW.frame.size.width,SUB.frame.size.width)
将子视图放置在视图的水平中心

对于垂直中心也一样,只需使用“高度”和“宽度”

即可,因此无法将子视图设置为当前视图的中心?我不一定需要使用。frameThis是错误的,正如Noah在另一个答案中指出的“子视图的中心不会与其superview位于同一坐标系中。将一个中心设置为另一个中心没有意义”子视图的中心不会与其superview位于同一坐标系中。把一个人的中心设为另一个人的中心是没有意义的。如果我不知道索引怎么办?我可以使用指向子视图的变量吗?还有@Noah,子视图是全屏的,但其中一些是透明的,所以我想这样做。更近,但仍然关闭。这样子视图的左上角将位于其超级视图的中心。可能最好只使用
subview.center=CGPointMake(superview.bounds.size.width/2,superview.bounds.size.height/2)
您还应该设置值下限,或者使用CGRectIntegral来避免亚像素渲染。您需要非常小心如何在C中定义宏。这个宏应该是#定义COUNTMID(X,Y)((float)((X)-(Y))/2)
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);