Swift – 如何animation图像?

我正在尝试在特定的时间段内对图像进行animation处理。 它在Objective C中工作正常。但是,它不适用于Swift,我的错误在哪里?

Objective-C的代码是 –

-(void)viewDidLoad { [super viewDidLoad]; NSMutableArray *imgListArray=[NSMutableArray array]; for (int i=0; i<=11; i++) { NSString *strImageName=[NSString stringWithFormat:@"c%d.png", i]; NSLog(@"%@",strImageName); UIImage *image=[UIImage imageNamed:strImageName]; [imgListArray addObject:image]; } self.imgView.animationImages = imgListArray; self.imgView.animationDuration =1.0f; [self.imgView startAnimating]; // Do any additional setup after loading the view, typically from a nib } 

Swift的代码是 –

 override func viewDidLoad() { super.viewDidLoad() var imgListArray :NSMutableArray = [] for countValue in 1...11 { var strImageName : String = "c\(countValue).png" var image = UIImage(named:strImageName) // suggested by Anil imgListArray.addObject(image) } // Swift code HERE for Objective c } 

 [UIImage imageNamed (strImageName)] 

这不是快速的代码。 在迅速将是

 UIImage(named:strImageName) 

修改代码:

 var imgListArray :NSMutableArray = [] for countValue in 1...11 { var strImageName : String = "c\(countValue).png" var image = UIImage(named:strImageName) imgListArray .addObject(image) } self.imageView.animationImages = imgListArray; self.imageView.animationDuration = 1.0 self.imageView.startAnimating() 

对于Swift 2,请使用[UIImage]

 var images: [UIImage] = [] for i in 1...2 { images.append(UIImage(named: "c\(i)")!) } myImageView.animationImages = images myImageView.animationDuration = 1.0 myImageView.startAnimating() 

在迅速,你可以更进一步,并有一个简单的线路来做到这一点:

 let loadingImages = (1...11).map { UIImage(named: "c\($0)")! } 

然后你可以完成剩下的工作,并将其注入到imageView中

 self.imageView.animationImages = loadingImages self.imageView.animationDuration = 1.0 self.imageView.startAnimating() 

在迅速3 – 创build图像arrays,只是animation。

 func animate_images() { let myimgArr = ["1.jpg","2.jpg","3.jpg"] var images = [UIImage]() for i in 0..<myimgArr.count { images.append(UIImage(named: myimgArr[i])!) } imgView_ref.animationImages = images imgView_ref.animationDuration = 0.04 imgView_ref.animationRepeatCount = 2 imgView_ref.startAnimating() } 

而停止animation只是写

  imgView_ref.stopAnimating() 

另一种方法,如果你想animation的图像数组:

 var counter = 1 var timer = NSTimer() @IBOutlet weak var someImg: UIImageView! override func viewDidLoad() { super.viewDidLoad() timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("doSomeAnimation"), userInfo: nil, repeats: true) } func doSomeAnimation() { //I have four pngs in my project, which are named frame1.png ... and so on if counter == 4 { counter = 1 }else { counter++ } someImg.image = UIImage(named: "frame\(counter).png") } 

希望能帮助到你!!

对于运行多个animation的人,根据variables,尝试下面的内容。

例如,你可以运行一个animation发送0或1(也许根据你的应用知道白天还是夜晚):

 func runAnimation (imgView: UIImageView, arrayPos: Int) { let timingArray = [7.0,10.0] //Durations of each let frameArray = [43,45] //Frames for each var imgArray: Array<UIImage> = [] //Setup empty array for i in 1 ... frameArray[arrayPos] { //Fill empty array with images!! let imageToAdd = UIImage(named: "animationNum_\(arrayPos)-frameNum_\(i)") imgArray.append(imageToAdd!) } imgView.animationImages = imgArray imgView.animationDuration = timingArray[arrayPos] imgView.animationRepeatCount = 2 imgView.startAnimating() }