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

问题描述:

我正在寻找iPhone上的一系列图像的动画。图像以连续顺序命名(image1,image2,image3等)。我正在寻找最佳的方式来动画这些图像,而不必将它们放入数组中。从uiimageview.animationimages中移除图像 - iPhone/Swift

我有多组图像将随机选择。每个图像集都是〜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,这似乎适用于大多数人,它确实有帮助,但并没有完全解决我的问题。我一次添加大约100张图像的数组,以便uiimageview.animation图像。这部动画将会播放并与另外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 
       } 
      } 

我希望我理解你的问题是正确的,但下一次,尝试通过编码做一些事情,然后问这里有什么错在我的代码。就像提问类似的问题,我得到了很多负面的观点。

+0

感谢您的帮助。我将试验你的代码,并试图更好地理解它是如何工作的,看看它如何帮助我。我也很欣赏关于我的帖子的提示。我想包括我最初的代码,但是在试图通过大约10-15次不同的尝试来解决这个问题后,它变成了一场噩梦。我甚至不知道哪一个最接近那个点。希望我最近对我的帖子进行的编辑会有所帮助。 – kShmoove 2015-04-06 23:54:54

+0

我无法获得上面的代码来完成我的目标。我想让图像停留在屏幕中间,并一次更新一帧。此代码移动了我的图像。即使消除x值的变化,它也不会在适当的位置生成动画,它只是发生得太快而立即显示动画中的最后一个图像。我与NSTimer混为一谈,但我对运行这样的动画的计时器并没有太大的运气,我觉得有一种更好的方法来做这样的简单动画。有了这个说法,我感谢你的建议,它教会了我一些新的东西。 – kShmoove 2015-04-07 03:08:06