动画期间视图控制器中的中心图像

时间:2015-07-10 02:54:09

标签: ios iphone swift animation cgrectmake

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

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

感谢所有回复的人。

4 个答案:

答案 0 :(得分:0)

不要更改frame,而是更改bounds。这使您可以在保留center不变量的同时更改大小。将边界的原点保持在0,0并仅将边界大小的宽度和高度更改为您想要的任何值。

答案 1 :(得分:0)

您可以使用

self.image.center = self.view.center

或者您可以在UIImageView中将ContentMode的{​​{1}}媒体资源设为center。另外,请确保InterfaceBuilder符合splashImage.png的相应大小和imageView大小SuperViewenter image description here

答案 2 :(得分:0)

首先,如何保持一些UIImageView居中的最简单方法是使用autolayout将其绑定到superview的所有方面,并将contentMode设置为" Center"正如Sudhin Davis建议的那样,或者设置"对齐容器中的水平中心"和#34;对齐容器中的垂直中心"它为0(在构建时没有设置或删除高度和宽度)。

但是如果你想创建一个启动画面ViewController,它将会延长'你的本地启动画面'当你做一些工作时的图像呈现,那么你可以使用类似的东西:

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,它使用来自此答案的建议方法之一提供Splash屏幕图像名称{ {3}}

我通常使用这样的东西:

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%匹配'介绍。所以不要跳跃'应该出现。

答案 3 :(得分:0)

如果您想为比例设置动画,为什么不使用CGAffineTransform?

ng-mouseover="mouseoverOnStep(Color.color_value, '.mask-second-{{Color.id}}');"