动画中的视图控制器中的中心图像
我在Swift中为我的应用程序创建了一个启动画面,我遇到了一个问题,当我缩放图像时,它的大小从左上角开始变大,将整个图像从屏幕中心移开。动画中的视图控制器中的中心图像
我试着手动减去估计的运动差异(如下面的代码所示),但闭合内的第一行代码不会将图像保留在每个屏幕大小的中心位置。截至目前,它只出现在iPhone 6 Plus的屏幕上。
UIView.animateWithDuration(1.5, animations: {() -> Void in
self.image.frame = CGRectMake((self.image.center.x)/2 - 20, (self.image.center.y)/2 + 20, 250, 250)
})
是否有一行代码允许图像在缩放后保持居中在所有屏幕尺寸上?
在此先感谢所有回复的人。
而不是更改frame
,请更改bounds
。这可以让您在保持center
不变的同时更改大小。将边界的原点保持在0,0
,并只将边界大小的宽度和高度更改为任何所需的值。
您可以使用
self.image.center = self.view.center
,或者你可以在你的InterfaceBuilder
设置UIImageView
的ContentMode
财产center
。还请确保您的splashImage.png
符合imageView
的相应尺寸和尺寸,与SuperView
的尺寸相同。
首先,如何保持一定的UIImageView中心的最简单的方法是要么限制,但是使用自动版式到上海华盈的各方面,并设置contentMode以“中心”为Sudhin戴维斯建议,或设置“水平中齐容器“和”将容器中的垂直居中对齐“为0(在构建时未留下高度和宽度,或者未将其移除)。
但是,如果你想创建一个闪屏视图控制器将被“延长”你的“本土闪屏”的形象呈现,而你做了一些工作,那么你可以使用类似:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
imageView?.image = UIImage(named: splashScreenImageName())
}
凡imageView
是一个简单的UIImageView出口绑定到它的超级视图的各个方面,并且splashScreenImageName()
是一种func,它使用从question的答案中提供的建议方法之一提供了Splash屏幕图像名称。
我通常使用的是这样的:
func splashScreenImageName() -> String {
// Construct the name.
var splashScreenImageName = "LaunchImage";
if (UIDevice.isIPhone6Plus) {
splashScreenImageName += "-800-Portrait-736h";
}
else if (UIDevice.isIPhone6) {
splashScreenImageName += "-800-667h";
}
else if(UIDevice.isIPhone5) {
splashScreenImageName += "-700-568h";
}
else if (UIDevice.isIPad) {
splashScreenImageName += "-700-Landscape";
}
else {
splashScreenImageName += "-700";
}
return splashScreenImageName;
}
优点:
- 使用被重用你的闪屏图像。这意味着您不需要为iPhone添加另外3个.jpgs,为iPad添加2个(针对每个方向),并将其与“本机启动画面”保持同步。
- 因此您正在降低捆绑的应用程序大小。
- 以这种方式收到的图像将与在“本机启动画面”演示期间显示的图像100%匹配。所以不应该出现“跳跃”。
如果你想动画的规模,为什么不使用CGAffineTransform?
image.transform = CGAffineTransformMakeScale(0.01, 0.01)
UIView.animateWithDuration(1.0, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in
self.image.transform = CGAffineTransformIdentity
}) { (finished) -> Void in
}
'self.image.transform = CGAffineTransformMakeScale(0.5,0.5);'? – Zhang