如何以编程方式集中电影播放器​​?

时间:2015-07-21 07:08:48

标签: ios swift

我需要电影播放器​​垂直居中。

moviePlayer.view.frame = CGRect(x: ???, y: self.view.frame.size.height/4, width: 200, height: 200)

我已尝试self.view.frame.size.width/2self.view.center.x。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以在设置框架后设置center属性。

moviePlayer.view.center = self.view.center;

还需要考虑一个问题 - 如果moviePlayer.viewself.view的子视图,请不要使用self.view.frame。请考虑改为使用self.view.bounds

垂直居中

CGPoint center = self.view.center;
center.y = //whatever you need
moviePlayer.view.center = center;

<强>更新

正如@Antonio所提到的,只有当self.view的左上角是屏幕左上角时,它才有效。

更好的方式

CGPoint center = CGPointMake(CGRectGetMidX(self.view.bounds), <#Whatever you need#>);
moviePlayer.view.center = center;

但是,我建议使用NSLayoutConstraints以获得更好的效果=)

需要考虑的事项

但是,以这种方式设置框架并不是最好的 - 您将被迫手动计算每个视图的位置和大小。如果您的布局是普通的,请使用autoresizingMaskcontentMode。像那样

//after setting moviePlayer.view.frame
moviePlayer.view.autoresizingMask = UIViewAutoresizingNone;
self.view.contentMode = UIViewContentModeCenter;

如果您的内容不够简单,请使用NSLayoutConstraint s。此外,使用它您只能以一个轴(垂直或水平)为中心

答案 1 :(得分:1)

以下是两个编程习惯用法,可用于将子视图置于其超视图中。如果您正在编写自定义视图,则此代码应该位于该视图的layoutSubviews方法中。如果这是视图控制器的一部分,它应该采用viewDidLayoutSubviews方法。

方法1:设置center

CGFloat x = CGRectGetMidX(superview.bounds);
CGFloat y = CGRectGetMidY(superview.bounds);
subview.center = CGPointMake(x, y);

方法2:设置frame

CGFloat width = (... calculate subview width ...);
CGFloat height = (... calculate subview height ...);
CGFloat x = (CGRectGetWidth(superview.bounds) - width) / 2.0;
CGFloat y = (CGRectGetWidth(superview.bounds) - height) / 2.0;
subview.frame = CGRectMake(x, y, width, height);