Я пытаюсь программно создать ряд фоновых изображений, которые исчезают из одного в другое..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 из моей памяти, чтобы я мог в цикле больше изображений без их укладки?
Изображения загружаются и хранятся в памяти все время, помещая изображения в 'imagesArray'. – dasdom
Вы можете сделать это с помощью CoreAnimation, используя один вид изображения - http://stackoverflow.com/questions/1550206/how-to-crossfade-between-2-images-on-iphone-using-core-animation – Paulw11
Спасибо Paulw11, но это решение написано в Objective-C. Это, по крайней мере, дает мне какое-то направление, когда я пытаюсь понять, как его перевести. –