swift版本的汤姆猫

//
//  ViewController.swift
//  汤姆猫
//
//  Created by admin on 15/12/25.
//  Copyright © 2015年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    //定义 UIImageView 变量
    var imageView:UIImageView = UIImageView()
    override func viewDidLoad() {
        super.viewDidLoad()
        //设置imageView坐标,尺寸
        imageView.frame = CGRect(origin: CGPoint(x: 20, y: 20), size: CGSize(width: 280, height: 450))
        //设置imageView默认图片
        imageView.image = UIImage(contentsOfFile: NSBundle.mainBundle().pathForResource("cymbal_00", ofType: "jpg")!)!
        //把imageView添加进主视图
        self.view.addSubview(self.imageView)
        addButton("cymbal",actionName: "cymbal",x:50,y:400)
        addButton("pie",actionName: "pie",x:100,y:400)
        // Do any additional setup after loading the view, typically from a nib.
    }
    //添加按钮方法
    func addButton(backgroundImage:String,actionName:String,x:CGFloat,y:CGFloat)
    {
        //添加按钮
        let cymbalButton = UIButton()
        let buttonBackgroundImage = UIImage(imageLiteral: backgroundImage)
        //设置按钮背景图片
        cymbalButton.setBackgroundImage(buttonBackgroundImage, forState: UIControlState())
        //设置按钮位置坐标和宽度高度
        cymbalButton.frame = CGRect(origin: CGPoint(x: x, y: y), size: CGSize(width: buttonBackgroundImage.size.width, height: buttonBackgroundImage.size.height))
        //绑定事件方法,带参数的方法要加上冒号
        cymbalButton.addTarget(self, action: Selector("\(actionName):"), forControlEvents: UIControlEvents.TouchDown)
        //添加进主视图
        self.view.addSubview(cymbalButton)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func cymbal(sender: AnyObject) {
        //执行动画
        doAnimatingImage(self.getAnimatingImage("cymbal_",startNumber:0,endNumber:12))
    }
    @IBAction func pie(sender: AnyObject) {
        doAnimatingImage(self.getAnimatingImage("pie_",startNumber:0,endNumber:23))
    }
    //获得图片资源
    func getAnimatingImage(imagePrefix:String,startNumber:Int,endNumber:Int)->[UIImage]
    {
        var imageArr:[UIImage] = []
        for var i = startNumber;i <= endNumber;i++
        {
            //不足两位用0补齐
            let imagePath = String(format: "%02i", i)
            //使用这个方式(imageLiteral)创建的图片会缓存在内存中,系统内存占用会很大
            //imageArr.append(UIImage(imageLiteral: "\(imagePrefix)\(imagePath)"))
            //这个方式创建的图片不会缓存在内存中,但是要注意,图片不能放在.xcassets文件中,.xcassets中的文件都是经过处理的,不能像这样取得
            imageArr.append(UIImage(contentsOfFile: NSBundle.mainBundle().pathForResource("\(imagePrefix)\(imagePath)", ofType: "jpg")!)!)
        }
        return imageArr
    }

    //播放动画
    func doAnimatingImage(imageArr:[UIImage])
    {
        //当前正在执行动画的时候,不响应动作
        if imageView.isAnimating() == false
        {
            //设置帧动画图片数组
            imageView.animationImages = imageArr
            //设置重复次数,默认是执行无数次,这里设置成1次
            imageView.animationRepeatCount = 1
            //设置动画执行时间
            imageView.animationDuration = NSTimeInterval(Double(imageArr.count) * 0.07)
            //开始执行动画
            imageView.startAnimating()
            //动画之行完毕之后释放内存,这个函数是延时执行的
            self.performSelector(Selector("clearAnimetingImage"), withObject: nil, afterDelay: imageView.animationDuration)
        }
    }
    //清除对UIImage数组的强引用,释放内存
    func clearAnimetingImage()
    {
        imageView.animationImages = nil
    }

}

标签: swift, ios控件

添加新评论