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



我想在iPhone上制作一系列图像的动画。图像按连续顺序命名(图像1、图像2、图像3等)。我正在寻找最好的方法来制作这些图像的动画,而不必将它们放入阵列中。

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

除了使用如此多的内存外,不断更新UIImage.animationImages可能需要比我在处理这种大小的数组时更长的时间。我想我要找的是类似于手表套件的东西,它允许你"设置ImageNamed(),然后启动AnimationWithImagesInRange()。

编辑:

很抱歉,如果我最初的帖子没有我想象的那么清晰。我尽量避免为此发布代码,因为我在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 = []
}

这几乎是我的全部观点Controller.swift.

编辑:

所以事实证明,我真正的问题不是数组,而是iOS在使用名为的图像时缓存图像的方式。从那以后,我转而使用imagewithcontentsoffile,这似乎对大多数人都有效,它确实有帮助,但并不能完全解决我的问题。我正在向uiimageview.animation图像添加一个一次大约100个图像的数组。这个动画将很快播放并与另外100个图像交换,但我无法清除动画图像,所以每次我添加新数组时,无论我如何努力清除动画图像都会附加到旧数组上。

我不确定你到底想要什么,但也许这段代码可以帮助你。我按顺序添加了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
                }
            }

我希望我能正确理解你的问题,但下次,试着通过编码来做一些事情,然后在这里问我的代码出了什么问题。我得到了很多负面的分数,就像问你这样的问题一样。

最新更新