图片浏览器,使用动画效果实现 CATransition

//
//  ViewController.swift
//  图片浏览器_核心动画
//
//  Created by admin on 16/1/28.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var image: UIImageView!
    lazy var images:[UIImage] = {
        var images:[UIImage] = []
        for var i = 1;i <= 9;i++
        {
            images.append(UIImage(imageLiteral: "\(i)"))
        }
        return images
    }()
    override func viewDidLoad() {
        super.viewDidLoad()
        let tap = UITapGestureRecognizer(target: self, action: "switchImage:")
        self.image.addGestureRecognizer(tap)
        self.image.image = self.images.first
        // Do any additional setup after loading the view, typically from a nib.
    }
    /**
     * 提示:转场的动画的类型(type)和子头型(subtype) 能用字符串常量就用字符常量
     */


     /**
     *******************************************************
     type:动画类型(比如:滴水效果,翻转效果...)
     -------------------------------------------------------
     fade kCATransitionFade 交叉淡化过渡
     moveIn kCATransitionMoveIn 新视图移到旧视图上面
     push kCATransitionPush 新视图把旧视图推出去
     reveal kCATransitionReveal 将旧视图移开,显示下面的新视图
     pageCurl               向上翻一页
     pageUnCurl             向下翻一页
     rippleEffect             滴水效果
     suckEffect 收缩效果,如一块布被抽走
     cube                   立方体效果
     oglFlip              上下左右翻转效果
     rotate     旋转效果
     cameraIrisHollowClose 相机镜头关上效果(不支持过渡方向)
     cameraIrisHollowOpen 相机镜头打开效果(不支持过渡方向)

     *******************************************************
     subtype: 动画方向(比如说是从左边进入,还是从右边进入...)
     ------------------------------------------------------
     kCATransitionFromRight;
     kCATransitionFromLeft;
     kCATransitionFromTop;
     kCATransitionFromBottom;

     当 type 为@"rotate"(旋转)的时候,它也有几个对应的 subtype,分别为:
     90cw 逆时针旋转 90°
     90ccw 顺时针旋转 90°
     180cw 逆时针旋转 180°
     180ccw  顺时针旋转 180°
     **/
    // 改变图片
    func switchImage(tap:UITapGestureRecognizer)
    {
        var imageIndex = 0
        let activeIndex = self.images.indexOf(self.image.image!)
        if tap.locationInView(tap.view).x < (UIScreen.mainScreen().bounds.size.width * 0.5)
        {
            imageIndex = (activeIndex! == 0) ? self.images.count - 1 : activeIndex! - 1
        }
        else
        {
            imageIndex = (activeIndex! == (self.images.count - 1)) ? 0 : activeIndex! + 1
        }
        self.image.image = self.images[imageIndex]
        // 实例化动画对象
        let animation = CATransition()
        // 动画时间
        animation.duration = 2
        // 动画类型
        // `fade', `moveIn', `push' and `reveal'
        animation.type = "moveIn"
        // 动画执行的方向
        //    fromLeft', 动画由左边开始
        //    `fromRight', 动画由右边开始
        //    `fromTop' and
        //    * `fromBottom'
        animation.subtype = "fromBottom"
        // 添加动画到图层
        self.image.layer.addAnimation(animation, forKey: nil)
    }
}

标签: swift, 核心动画

添加新评论