您的位置:首页 > 移动开发 > Swift

Developing iOS 8 Apps with Swift Lesson 11学习

2016-01-21 10:59 459 查看
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 <Tti:     多长时间间隔执行一次
- parameter target:   执行的对象
- parameter selector: 方法
- parameter userInfo: 用户信息
- parameter repeats:  是否重复执行
*/
NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: "fire:", userInfo: "zengchao", repeats: true)
}

//tolerance:容忍误差,让系统选择一个更高效的时间来执行
func fire(time:NSTimer){
time.tolerance = 0.3
print(time.userInfo as! String)
}

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内容)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息