2015-07-10 3 views
0

Я создаю заставку для моего приложения в Swift, и у меня возникла проблема, когда, когда я масштабирую изображение, он имеет размеры в верхнем левом углу и, следовательно, сдвигает все изображение от центра экрана.Center Image in View Controller во время анимации

Я попытался вычесть предполагаемую разницу в движении вручную (как показано в приведенном ниже коде), но первая строка кода в закрытии не удерживает изображение в центре для каждого размера экрана. На данный момент он появляется только на экране 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 

или вы можете установить UIImageView «s ContentMode свойство как center в вашем InterfaceBuilder. Также убедитесь, что ваш splashImage.png соответствует соответствующим размерам и размеру imageView, также как и размер SuperView. enter image description here

0

Во-первых, самый простой способ, как сохранить некоторые UIImageView центрированную либо связаны его с помощью autolayout ко всем сторонам надтаблицы и установить contentMode в «Центр», как Sudhin Davis советы, или установить «Align Horizontal Center в Контейнер "и" Выровнять вертикальный центр в контейнере "до 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() - это функция, которая предоставляет имя изображения Splash, используя один из советов по ответам на этот вопрос question.

Я обычно использую что-то вроде этого:

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; 
} 

Pros:

  • использовать повторно использует экранную заставку изображения. Это означает, что вам не нужно добавлять еще 3 .jpg для iPhone и 2 для iPad (для каждой ориентации) в пакет и синхронизировать их с «собственным заставным экраном».
  • поэтому вы опускаете в комплекте размер приложения.
  • Изображение, полученное таким образом, будет соответствовать 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 

    }