2016-02-26 5 views
2

Я пытаюсь программно создать ряд фоновых изображений, которые исчезают из одного в другое..removeFromSuperview Не работает над UIImageView

У меня возникли проблемы с памятью, так как кажется, что я успешно удаляю UIImageView, который я создаю после того, как анимация полностью исчезла.

В моем фоне контроллер быстрого файл У меня есть следующий:

let URL1 = "bg_1.jpg" 
let img1 = UIImage(named: URL1) 
let URL2 = "bg_2.jpg" 
let img2 = UIImage(named: URL2) 

let imagesArray: [UIImage] = [ 
    img1!, 
    img2!, 
] 

var backgroundImageArray: [UIImageView] = [] 

func createBackgroundImage(view: UIView, backgroundImage: UIImage) -> UIImageView { 

    let backgroundImageView = UIImageView(image: backgroundImage) 
    backgroundImageView.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(backgroundImageView) 

    let horizontalConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0) 
    view.addConstraint(horizontalConstraint) 

    let verticalConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0) 
    view.addConstraint(verticalConstraint) 

    let widthConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0) 
    view.addConstraint(widthConstraint) 

    let heightConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0) 
    view.addConstraint(heightConstraint) 

    backgroundImageView.contentMode = .ScaleAspectFill 

    return backgroundImageView 

} 

У меня также есть подобная функция createBackgroundImage(), что называется createInvisibleBackgroundImage(), который делает то же самое, но вместо этого дает UIImageView альфа свойство 0 до прикрепляя его к надзору.

В моем ViewController.swift файле у меня есть

func animateBackgroundImages(iteration: Int, mainView: UIView) {  

if iteration == 0 { 
      var bg1: UIImageView = createBackgroundImage(mainView, backgroundImage: imagesArray[0]) 
      var bg2: UIImageView = createInvisibleBackgroundImage(mainView, backgroundImage: imagesArray[1]) 

     UIView.animateWithDuration(5.0, delay: 1.0, options: UIViewAnimationOptions.TransitionNone, animations: { 
      bg2.alpha = 1 
      }, completion: { 
       (Bool) in 
       bg1.removeFromSuperview() 
     }) 

    } 

    if iteration > 0 && iteration < 7 { 
     // This is for later when I get it working 
    } 

} 

animateBackgroundImages(0, mainView: view) 

Я замечаю, что даже если я сказал, удалить bg1 из надтаблицы после замирания в из BG2 завершено использование памяти остается неизменным (49 МБ)

Как удалить bg1 из моей памяти, чтобы я мог в цикле больше изображений без их укладки?

+0

Изображения загружаются и хранятся в памяти все время, помещая изображения в 'imagesArray'. – dasdom

+1

Вы можете сделать это с помощью CoreAnimation, используя один вид изображения - http://stackoverflow.com/questions/1550206/how-to-crossfade-between-2-images-on-iphone-using-core-animation – Paulw11

+0

Спасибо Paulw11, но это решение написано в Objective-C. Это, по крайней мере, дает мне какое-то направление, когда я пытаюсь понять, как его перевести. –

ответ

0

Оказывается, используя UIImage(named: String) постоянно кэширует изображение!

Вместо этого я использовал UIImage(contentsOfFile: String) и удалил все ссылки на UIImage, который затем работал!

См. UIImage using contentsOfFile Для получения дополнительной информации!

Смежные вопросы