从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
}
}
我希望我理解你的问题是正确的,但下一次,尝试通过编码做一些事情,然后问这里有什么错在我的代码。就像提问类似的问题,我得到了很多负面的观点。
感谢您的帮助。我将试验你的代码,并试图更好地理解它是如何工作的,看看它如何帮助我。我也很欣赏关于我的帖子的提示。我想包括我最初的代码,但是在试图通过大约10-15次不同的尝试来解决这个问题后,它变成了一场噩梦。我甚至不知道哪一个最接近那个点。希望我最近对我的帖子进行的编辑会有所帮助。 – kShmoove 2015-04-06 23:54:54
我无法获得上面的代码来完成我的目标。我想让图像停留在屏幕中间,并一次更新一帧。此代码移动了我的图像。即使消除x值的变化,它也不会在适当的位置生成动画,它只是发生得太快而立即显示动画中的最后一个图像。我与NSTimer混为一谈,但我对运行这样的动画的计时器并没有太大的运气,我觉得有一种更好的方法来做这样的简单动画。有了这个说法,我感谢你的建议,它教会了我一些新的东西。 – kShmoove 2015-04-07 03:08:06