视图的切换从第一个视图 imageview1切换到第二个视图 imageview2
拖两张图片进来,随后拖两个imageview 指定背景图片为img1 和 img2
import UIKit
class ViewController: UIViewController {
//实现视图的切换 要用到一个变量
var rectoVisible = true
@IBOutlet var img1: UIImageView!
@IBOutlet var img2: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//重写开始触摸的时候
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
func completeHandler(v:Bool){
print("Anim complete")
rectoVisible = !rectoVisible
}
if rectoVisible {
//实现视图的切换 从左往右切换
UIView.transitionFromView(img1, toView: img2, duration: 1.0, options: UIViewAnimationOptions.TransitionFlipFromLeft, completion: completeHandler)
}else{
UIView.transitionFromView(img1, toView: img2, duration: 1.0, options: UIViewAnimationOptions.TransitionFlipFromRight, completion:completeHandler)
}
}
}
实现动画的效果 分为三步 开始动画 配置动画 提交动画
import UIKit
class ViewController: UIViewController {
@IBOutlet var img1: UIImageView!
@IBOutlet var img2: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addSubview(img1)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//重写开始触摸的时候
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//动画的执行 分为3个步骤
//1 开始动画 参数都可以不要
UIView.beginAnimations(nil , context: nil)
//2 适配(匹配)动画 时间 cache为缓存
UIView.setAnimationTransition(UIViewAnimationTransition.FlipFromLeft, forView: img1, cache: true)
UIView.setAnimationDuration(2)
UIView.commitAnimations()
}
}
实现自定义的动画
import UIKit
class ViewController: UIViewController {
@IBOutlet var img1: UIImageView!
@IBOutlet var img2: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addSubview(img1)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//重写开始触摸的时候
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//实现自定义的方法
func anmi() {
img1.alpha = 0
img1.center = CGPoint(x: 100,y: 200)
}
//动画执行好后的动作 这个都有个参数 v 为Bool类型
func complete(v:Bool) {
print("1")
}
UIView.transitionWithView(img1, duration: 2, options: UIViewAnimationOptions.TransitionFlipFromRight, animations: anmi(), completion: complete )
}
}
使用CATransition来实现动画 主要分为6个步骤 在代码中演示
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func change(sender: UIButton) {
//1创建CATransition对象
var transition = CATransition()
//2设置动画的时间
transition.duration = 1.0
//3设置动画的类型
transition.type = kCATransitionPush
//4设置动画的方向
transition.subtype = kCATransitionFromLeft
//5执行动画的动作 默认为1和0
self.view.exchangeSubviewAtIndex(1, withSubviewAtIndex: 0)
//6添加到core animation的层中
self.view.layer.addAnimation(transition, forKey: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
transform属性来实现动画
平移的动画
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func change(sender: UIButton) {
//每次都是从当前位置平移 tx表示x轴方向 ty表示y轴方向 这是代表平移
self.imageView.transform = CGAffineTransformMakeTranslation(1.2, 1.2)
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, -1.2, -1.2)
}
}
旋转的动画 也有两种实现方式,都是多了一个参数 表示当前的状态
@IBAction func change(sender: UIButton) {
//每次都是从当前位置平移 代表弧度 注意一定要是弧度转化成cgfloat
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, CGFloat(-M_PI/2))
self.imageView.transform = CGAffineTransformMakeRotation( CGFloat(-M_PI/2))
缩放的代码
@IBAction func change(sender: UIButton) {
//每次都是从当前位置平移 缩放 一个是x轴的缩放 一个是y轴的缩放
self.imageView.transform = CGAffineTransformMakeScale(2.0, 2.0)
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, 2.0, 2.0)
}
反转的代码表示两个状态之间的跳转
@IBAction func change(sender: UIButton) {
//每次都是从当前位置平移 缩放 一个是x轴的缩放 一个是y轴的缩放
self.imageView.transform = CGAffineTransformConcat(self.imageView.transform, self.imageView.transform)
self.imageView.transform = CGAffineTransformInvert(self.imageView.transform)
}
cabasicanimation动画 有fromvalue 和 tovalue 一定要加上动画实现的三个步骤 否则动画看起来就是一瞬间的效果了