从uiimageview.animationimages - iPhone / Swift中删除图像

时间:2015-04-05 18:32:39

标签: ios arrays xcode swift animation

我希望在iPhone上制作一系列图像动画。图像按连续顺序命名(image1,image2,image3等)。我正在寻找动画这些图像的最佳方法,而不必将它们放入阵列中。

我有多组图像随机选择。每个图像集大约为100帧,因此当应用程序启动时将所有这些图像放在数组中,就意味着内存中有大约1000张图像。

除了使用如此多的内存之外,不断更新UIImage.animationImages可能需要比使用此大小的数组时更长的时间。我想我正在寻找的是类似于手表套件的东西,它允许你进入" setImageNamed(),然后startAnimatingWithImagesInRange()。

编辑:

很抱歉,如果我的初始帖子不像我想象的那么清楚。我试图避免为此发布代码,因为我已经在Xcode中以大约10种不同的方式尝试过这种方式,其中没有一种方法可以完全按照我的方式工作。我在下面发布了我的代码,我的问题是每当我动画时内存继续填满,当我尝试清除它时,数组保持满。对于它的价值,我对此非常陌生,所以我希望我错过了一些非常明显的东西,但我确保在来到这里或其他地方之前我自己想出来,这是学习的唯一途径。

@IBOutlet weak var imageViewOutlet: UIImageView!

var phaseArray: [UIImage] = []
var optionArray: [UIImage] = []
var outroArray: [UIImage] = []
var randomOption32: UInt32 = 1
var randomOption = 1
var buttonPressed = false

@IBAction func testButton(sender: AnyObject) {

    if buttonPressed == false {

        fillPhaseArray()
        fillOptionArray()
        fillOutroArray()
        imageViewOutlet.animationImages = phaseArray + optionArray + outroArray
        imageViewOutlet.animationRepeatCount = 1
        imageViewOutlet.startAnimating()

        buttonPressed == true

    } else {

        clearArrays()
        fillOptionArray()
        fillOutroArray()
        imageViewOutlet.animationImages = phaseArray + optionArray + outroArray
        imageViewOutlet.animationRepeatCount = 1
        imageViewOutlet.startAnimating()

    }


}




func fillPhaseArray() {

    for var i = 1; i <= 65; i++ {

        phaseArray.append(UIImage(named: "phase1_\(i)")!)

    }

}

func fillOptionArray() {

    randomOption32 = arc4random_uniform(UInt32(15))
    randomOption = Int(randomOption32)

    for var i = 1; i <= 14; i++ {

        optionArray.append(UIImage(named: "option_\(randomOption)\(i)")!)

    }
}

func fillOutroArray() {

    for var i = 1; i <= 11; i++ {

        outroArray.append(UIImage(named: "outro_\(randomOption)\(i)")!)
    }

}


func clearArrays() {

    optionArray.removeAll(keepCapacity: true)
    optionArray = []
    outroArray.removeAll(keepCapacity: true)
    outroArray = []
    imageViewOutlet.animationImages?.removeAll(keepCapacity: false)
    imageViewOutlet.animationImages = []

}

这几乎是我的整个viewController.swift。

编辑:

事实证明,我的真正问题不是数组,而是iOS在使用图像命名时缓存图像的方式。我已经转而使用imagewithcontentsoffile,它似乎适用于大多数人,它确实有帮助,但并不能完全解决我的问题。我一次向uiimageview.animation图像添加一个大约100个图像的数组。这部动画将以非常快的速度播放和换出另外100张图像,但是我无法清除动画图像,因此每次添加新阵列时,无论我多么难以清除,它都会附加到旧图像上。 animationimages。

1 个答案:

答案 0 :(得分:0)

我不确定你到底想要什么,但也许这段代码可以帮到你。我按照你想要的顺序连续添加3张图片,

var myImage = UIImage(named: "image\(i).jpg") 

使用此行,我可以访问我的图像而无需放入数组。我想你也可以在动画中访问。

这是完整的代码。

 override func viewDidLoad() {
                var x = 50
                super.viewDidLoad()
                for(var i = 0; i < 4; ++i){
                    var cgfloatx = CGFloat(x)
                    var myImage = UIImage(named: "image\(i).jpg")
                    var myImageView = UIImageView(frame: CGRectMake(100, 100 + cgfloatx, 90, 90))
                    myImageView.image = myImage
                    self.view.addSubview(myImageView)
                    x += 100
                }
            }

我希望我理解你的问题是正确的,但下次尝试通过编码做一些事情,然后问我的代码中有什么问题。我有很多负面的观点,就像问你的问题一样。