首页投稿(暂停使用,暂停投稿)iOS学习笔记

Swift学习笔记3 - Gesture

2016-05-08  本文已影响996人  诸葛俊伟

前言

这还是斯坦福大学的课程-Developing iOS 9 APPs with Swift,这是第5节课的内容,我将我认为的关键点记录在我的学习笔记系列中。手势操作功能 (Gesture) 在苹果的各大产品中都占有相当重要的地位。用mac book的童鞋应该都深有体会它的触摸板是多么强大,很多时候(除了玩游戏)我都更愿意用触摸板,鼠标反而更麻烦一些。在iOS中,它的功能也是相当强大的,iphone的屏幕操作带给人的是一种享受。

Demo

今天仍然是这张萌蠢的脸,只是换了个发型,加了一些有趣的手势操作,可以改变他的表情,昨天还说让你自己敲代码去改呢~ 今天省了不少事。233

卡哇伊face

手势操作 (Gestures)

  1. 往UIView中添加一个手势识别器(叫UIView去识别那些手势)
  2. 当识别器无法识别的时候,需要一个控制器(gesture handler),通过状态机(state machine)来处理手势
@IBOutlet weak var pannableView: UIView {
  didSet {
    let recognizer = UIPanGestureRecognizer (
        target: self, action: #selector(ViewController.pan(_:))
    )
    pannableView.addGestureRecognizer(recognizer)
    }
}
func translantionInView(UIView) -> CGPoint //从下笔开始记录
func velocityInView(UIView) -> CGPoint // 移动的速度
func setTranslation(CGPoint, inView: UIView) // 设置从哪里开始
var state: UIGestureRecognizerState { get }
func pan(gesture: UIPanGestureRecognizer) {
  switch gesture.state {
    case .Changed: 
        fallthrough 
        //不同于其它语言的switch case,fallthrough表示这个case完成了,它还可以继续下个case,而不是break
    case .Ended: 
        let translation = gesture.tanslationInView(pannableView)
        // 通过 translation.x 和 .y 更新依赖于pan手势的任何其它内容
        gesture.setTranslation(CGPointZero, inView: pannableView)
    default: break
   }
}
var scale: CGFloat // 可重置,如demo
var velocity: CGFloat { get } // 每秒钟为单位
var rotation: CGFloat // 也可以在弧度中重置
var velocity: CGFloat { get } //每秒的旋转速度
var direction: UISwipeGestureRecognizerDirection // 哪个方向滑动
var numberOfTouchesRequired: Int // 几个手指
var numberofTapsRequired: Int // 点击的数量
var numberOfTouchesRequired: Int // 手指数量

多个MVC组合

MVC中, Controller的职责是将Model翻译给View。有些Controller可以拿别的MVC当作自己的View。


Multiple MVCs

iOS提供了一些很强大的控制器(Controller),它们以别的 “MVC” 作为自己的View。这也是做一个app必须具备的(你不能只有一个界面吧?囧)。e.g.

UITabBarController
UISplitViewController // i-pad, iphone 6 plus; split one screen into 2 parts
UINavigationController

* 当然你可以自己设计控制器(Controller)来做这个工作,但是那个。。。你会的话教教我😄

获取子MVC模块(Accessing the sub-MVCs)

var viewController: [UIViewController]? { get set } // 可以是optional的(比如tab bar)
var tabBarController: UITabBarController? { get }
var splitViewController: UISplitViewController? { get }
var navigationController: UINavigationController? { get }

比如,你想知道你的分屏控制器(split view controller,翻译的不好别骂我 = =)的细节,你可以使用如下语句

if let detailVC: UIViewController = splitViewController?.viewControllers[1] { ... } // 如上所说,[1] 是detail,细节,如果没有就是nil

如何链接这些MVC

以分屏控制器(split view controller)为例,只需从object library里拉一个过来就OK了,好简单。然后按住ctrl,分别往你的两个mvc上拉两条线,一条设置master,另一条设置detail。就像这样:


split view

by:诸葛俊伟
喜欢我的可以访问我的个人网站了解更多哦~

上一篇 下一篇

猜你喜欢

热点阅读