A.UIGestureRecognizer
1.
UIGestureRecognizer是個基類售貌,有7個子類。
2.
UIGestureRecognizer有兩種實(shí)現(xiàn)方式,Storyboard和代碼。
1)Storyboard實(shí)現(xiàn)方法:
sentAction
拖拽
2)代碼:
代碼實(shí)現(xiàn)的步驟:
步驟一、簡歷和設(shè)置收拾識別器實(shí)例也切,設(shè)置target,制定一些屬性
舉例代碼:var gesture1 = UITabGestureRecognizer(target: self, action:”view1Tap:")
步驟二妥曲、附加識別器到視圖
舉例代碼:view1.addGestureRecognizer(gesture1)
步驟三贾费、實(shí)現(xiàn)action方法
舉例代碼:
func view1Tap(sender:UITapGestureRecognizer) {
}
4.
具體的7種子類為:
1)點(diǎn)擊UITapGestureRecognizer
2)縮放UIPinchGestureRecognizer
3)旋轉(zhuǎn)UIRotationGestureRecognizer
4)滑動UISwiperGestureRecognizer
5)平移UIPanGestureRecognizer
6)長按UILongPressGestureRecognizer
7)從屏幕左邊緣平移UIScreenEdgePanGestureRecognizer
B.點(diǎn)擊UITapGestureRecognizer
1.Storyboar中的屬性介紹
可以設(shè)置手勢屬性有兩個:點(diǎn)擊次數(shù);有幾個接觸點(diǎn)在點(diǎn)擊檐盟。
使用場景:一個手指點(diǎn)擊一下是修改文檔褂萧,一個手指點(diǎn)擊兩下是更換背景顏色,兩個手指點(diǎn)擊一下是復(fù)制此文檔產(chǎn)生副本葵萎,兩個手指點(diǎn)擊兩下刪除此文檔导犹,等等。
2.sender的響應(yīng)事件有:
sender.locationInView
C.縮放UIPinchGestureRecognizer
1.Storyboar中的屬性介紹
放大縮小的倍數(shù)Scale屬性羡忘,浮點(diǎn)數(shù)谎痢。
2.代碼例子:
@IBAction func pinchIt(sender: UIPinchGestureRecognizer) {
var viewHeight = firstView.bounds.height
var viewWidth = firstView.bounds.width
firstView.bounds.size = CGSize(width: viewHeight*sender.scale, height: viewWidth*sender.scale)
}
D.旋轉(zhuǎn)UIRotationGestureRecognizer
1.Storyboar中的屬性介紹
rotation旋轉(zhuǎn)角度
2.常用的代碼:
讓view旋轉(zhuǎn)使用的是:transform
代碼例子:
@IBAction func gestureRotation(sender: UIRotationGestureRecognizer) {
secondView.transform = CGAffineTransformMakeRotation(sender.rotation)
}
E.滑動UISwiperGestureRecognizer
1.Storyboar中的屬性介紹
Swipe枚舉類型,四個方向:Up, Down, Left, Right
這個是最常見卷雕、最常使用的手勢了节猿,例如新聞客戶端中,左右可以切換類別,上下可以查看內(nèi)容滨嘱。
2.常用的代碼:
var distance:CGFloat = 0.0
@IBAction func swipeOne(sender: UISwipeGestureRecognizer) {
if(sender.direction == UISwipeGestureRecognizerDirection.Right){
distance += 20
viewOne.transform = CGAffineTransformMakeTranslation(distance, 0)
}
F.平移UIPanGestureRecognizer
1.Storyboar中的屬性介紹
只有Touches的設(shè)置峰鄙,最小為一,最大默認(rèn)不設(shè)置太雨。
2.關(guān)鍵方法:translationInView()
代碼舉例:
@IBAction func panOne(sender: UIPanGestureRecognizer) {
var width = sender.translationInView(oneView).x
var height = sender.translationInView(twoView).y
oneView.transform = CGAffineTransformMakeTranslation(width, height)
}
G.長按UILongPressGestureRecognizer
1.Storyboar中的屬性介紹
Min Duration 長按的時間吟榴,默認(rèn)是0.5秒。
Recognize 識別手指按了幾次囊扳,幾個點(diǎn)在觸控(就是幾個手指在按)吩翻。默認(rèn)是按了零次,默認(rèn)一個點(diǎn)(一個手指)在按锥咸。
Tolerance 手指長按在屏幕上狭瞎,如果手指移動超過10個點(diǎn)之后就不再是長按了。默認(rèn)是10個點(diǎn)搏予,可以自己修改默認(rèn)值脚作。
2.常用的代碼
長按刪除,或者長按出現(xiàn)彈出
@IBAction func longPress(sender: UILongPressGestureRecognizer) {
UIAlertView(title: "長按效果", message: "你長按的時間超過了0.5秒", delegate:self, cancelButtonTitle: "OK").show()
}
H.從屏幕左邊緣平移UIScreenEdgePanGestureRecognizer
這個需要真機(jī)缔刹,所以沒有講述,和其他的手勢沒有什么區(qū)別的劣针,如果將來在商業(yè)項目中用到了校镐,可以使用這個效果。
I.深度解析一下關(guān)于手勢操作事件
1.UI事件分類:3個
1)Touches 點(diǎn)擊捺典。
2)Motion 搖晃鸟廓,搖一搖,和感應(yīng)器相關(guān)的襟己。
3)RemoteControl 遙控引谜。例如使用線控耳機(jī)操作歌曲的下一首上一首暫停啟動等。
2.Touch事件階段:4個
1)touchesBegan:withEvent: 點(diǎn)擊開始
2)touchesMoved:withEvent: 正在屏幕上移動
3)touchesEnded:withEvent 點(diǎn)擊結(jié)束擎浴,手已經(jīng)放開了離開屏幕了
4)touchesCancelled:withEvent ?點(diǎn)擊意外中斷了
3.事件狀態(tài)機(jī)
J.自定義手勢處理器
1.步驟:
1)繼承 UIGestureRecognizer员咽,引用UIGestureRecognizerSubclass
2)實(shí)現(xiàn)相關(guān)的 EventPhase 方法
什么叫手勢?點(diǎn)按照規(guī)則排列成線贮预。
判斷手勢:判斷規(guī)則
2.
UICustomGestureRecognizer.swift 文件下的代碼為
import UIKit
import UIKit.UIGestureRecognizerSubclass
class UICustomGestureRecognizer: UIGestureRecognizer {
var leftTop = false
var rightDown = false
override init(target: AnyObject, action: Selector) {
super.init(target: target, action: action)
}
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
return
}
override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!) {
var myTouch = touches.anyObject() as UITouch
var myLocation = myTouch.locationInView(self.view)
if (myLocation.x < 10 && myLocation.y < 10){
leftTop = true
NSLog("左上角被點(diǎn)擊了")
}
if (myLocation.x + 10 > self.view?.bounds.width && myLocation.y + 10 > self.view?.bounds.height){
rightDown = true
NSLog("右下角被點(diǎn)擊了")
}
if (leftTop && rightDown){
self.state = UIGestureRecognizerState.Ended
}
}
override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
return
}
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
self.reset()
}
}
ViewController.swift文件下的代碼是
import UIKit
class ViewController: UIViewController {
@IBOutlet var yellowLabel: UILabel!
@IBOutlet var greenView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var gestureNew = UICustomGestureRecognizer(target: self, action: "handleIt:")
greenView.addGestureRecognizer(gestureNew)
//yellowLabel.addGestureRecognizer(gestureNew)
}
func handleIt (sender:UICustomGestureRecognizer){
greenView.backgroundColor = UIColor.redColor()
yellowLabel.text = "Sucess"
yellowLabel.backgroundColor = UIColor.blueColor()
yellowLabel.textColor = UIColor.whiteColor()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
注意事項
在view上添加label等其他控件時贝室,注意層級關(guān)系,在Storyboard中的需要手動調(diào)整一下各個層級關(guān)系