Lesson11:Unwind Segues,Alerts,Timers,View Animation
1、UIAlertController简介
UIAlertController可以参考我之前的一篇文章iOS项目开发实战(Swift)—Button和Alert学习
UIAlertController有Alert和ActionSheet两种样式,在iOS系统中,Alert样式是直接弹窗到屏幕中间,起到一个提示警告的作用。而ActionSheet是从屏幕底部弹出来的,给用户提供更多的选项功能。
下面通过做一个Alert样式的Demo来看看如何用UIAlertController。
Demo描述:点击导航栏右上角的+号,弹出Alert框,同时Alert窗中有文本输入框,通过点击Login,可以获得文本框的值并且在控制台打印出来。
关键代码如下:
func loadAlert(){
let alertController = UIAlertController(title: "Alert", message: "Alert Message", preferredStyle: UIAlertControllerStyle.Alert)
//登录action
let loginAciton = UIAlertAction(title: "Login", style: .Default) { (action:UIAlertAction) -> Void in
guard let text = alertController.textFields?.first?.text
else{
return
}
//输出输入文本框的内容
print(text)
}
alertController.addAction(loginAciton)
//取消action
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
alertController.addAction(cancelAction)
//给Alert添加文本输入框
alertController.addTextFieldWithConfigurationHandler { (textField:UITextField) -> Void in
}
presentViewController(alertController, animated: true, completion: nil)
}
PS:iPad上书写ActionSheet样式和iPhone上有点不同,ipad上面ActionSheet的UIAlertController是从右上角弹出来的,并且悬浮。在书写的时候,需要多添几行代码。而iPhone和iPad上面的Alert样式编写代码的时候是一致。
2、NSTimer
NSTimer定时器主要用到的技术是runloop,在主线程之中使用。经常会用到NSTimer,比如说在做循环滚动新闻的时候,需要让它每隔一小段时间自动执行滚动操作。
NSTimer使用示例如下:
override func viewDidLoad() {
super.viewDidLoad()
//这样采用Alert样式,actionsheet同理
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "loadAlert")
/**
定时器
- parameter
NSTimer的tolerant属性是容忍误差,让系统选择一个更高效的时间来执行。
3、Animation
1)UIView 视图动画
UIView视图动画其实就是对Core Animation进行封装,使用起来很简单。只需要设置好动画之前和动画之后的属性,然后动画是由系统生成的,称为补间动画。一般的动画用UIView Animation就够了,只是自由度会降低。UIView的基础动画中,使用的变化属性通常有位置和大小如bounds/frame/center,外观如backgroundColor/alpha,转换transform如translation/rotation/scale。
下面看几个UIView的视图动画示例:
A:transform属性的类型为CGAffineTransform,其中包括:rotation旋转和scale缩放
案例:
let rotation = CGAffineTransformMakeRotation(CGFloat(M_PI))
let scale = CGAffineTransformMakeScale(0.5, 0.5)//缩放
UIView.animateWithDuration(1, delay: 0.5, options: [UIViewAnimationOptions.Repeat,UIViewAnimationOptions.Autoreverse ], animations: { () -> Void in
self.button.frame = CGRectMake(0, self.gHeight / 2, self.gWidth / 2, 50)
self.button.backgroundColor = UIColor(red: 23/255, green: 233/255, blue: 233/255, alpha: 1)
self.button.transform = scale
}, completion: nil)
B、Spring Animation 弹性动画
UIView.animateWithDuration(2, delay: 0.5, usingSpringWithDamping: 0.8, initialSpringVelocity: 10, options: UIViewAnimationOptions.Repeat, animations: { () -> Void in
}, completion: nil)
C、Transition Animation 转场动画
UIView.transitionFromView(UIView, toView: UIView, duration: NSTimeInterval, options: UIViewAnimationOptions, completion: nil)
D、Keyframe Animation 关键帧动画
UIView.animateKeyframesWithDuration(NSTimeInterval, delay: NSTimeInterval, options: UIViewKeyframeAnimationOptions, animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(Double, relativeDuration: Double, animations: { () -> Void in
//code
})
}, completion: nil)
E、贝塞尔曲线运动
2)ViewController转场动画
enum UIModalTransitionStyle: Int {
case CoverVertical // 底部滑入,默认
case FlipHorizontal // 水平翻转
case CrossDissolve // 隐出隐现
case PartialCurl // 翻页
}
3)Core Animation
Core Animation核心动画也包括基本动画、转场动画、关键帧动画、组动画、弹性动画。
CAAnimation实现了CAMediaTiming协议(三个子类)如下:
CAPropertyAnimation:CABasicAnimation/CAKeyFrameAnimation
CAAnimationGroup
CATransition(
4)Dynamic Animation(Lesson12内容)