2015-07-10 71 views
0

我在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)   
}) 

是否有一行代码允许图像在缩放后保持居中在所有屏幕尺寸上?

在此先感谢所有回复的人。

+0

'self.image.transform = CGAffineTransformMakeScale(0.5,0.5);'? – Zhang

回答

0

而不是更改frame,请更改bounds。这可以让您在保持center不变的同时更改大小。将边界的原点保持在0,0,并只将边界大小的宽度和高度更改为任何所需的值。

0

您可以使用

self.image.center = self.view.center 

,或者你可以在你的InterfaceBuilder设置UIImageViewContentMode财产center。还请确保您的splashImage.png符合imageView的相应尺寸和尺寸,与SuperView的尺寸相同。 enter image description here

0

首先,如何保持一定的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%匹配。所以不应该出现“跳跃”。
0

如果你想动画的规模,为什么不使用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 

    } 
相关问题