2017-02-11 75 views
0

我在線上遇到了斯坦福大學2016 CS193P課程的一些問題。 我懷疑這個問題可能是因爲我使用的是Xcode 8.2.1(所以我不能使用視頻中的相同代碼),但是我也可能在某個地方做了一個單子。我查閱了文檔並查看了堆棧溢出,但我無法解決這個問題。Swift 3中的UIPinchGestureRecognizer

FaceView代表一個卡通人臉,應該隨着捏(使用UIPinchGestureRecognizer)一起縮放。要做到這一點的插座內已FaceViewController(在視圖控制器爲FaceView)創建:

@IBOutlet weak var faceView: FaceView!{ 
    didSet{ 
    faceView.addGestureRecognizer(UIPinchGestureRecognizer(target:faceView, action:#selector(FaceView.changeScale(recognizer:)))) 
    updateUI() 
} 
} 

哪個FaceView類中執行的功能changeScale:

func changeScale(recognizer: UIPinchGestureRecognizer){ 
    switch recognizer.state { 
    case .changed, .ended: 
     NSLog("gesture") 
     scale *= recognizer.scale 
     recognizer.scale=1.0 
     let resultString = "pinch - scale = \(scale))" 
     NSLog(resultString) 
    default: 
     break 
    } 
} 

我添加了一個輸出到控制檯查看如果在我們衝擊視圖時比例發生變化。確實如此(控制檯的輸出示例:捏 - 比例= 1.10142245024732;捏 - 比例= 1.11638202852033;)

但是視圖並沒有改變。

我在在這一點上完全看...任何幫助讚賞

我已確認 用戶交互設置爲True 的IBOutlet中連接(通過控制檯輸出確認)

回答

0

這樣看來,@Daivest接近了答案:

self.transform = CGAffineTransform(scaleX:scale, y: scale) 

我真的不確定發生了什麼變化,爲什麼會需要這行是不是在教程 - 如果任何人都可以擺脫一些光在這將不勝感激!

0

你得到的縮放比例的變量,但你不縮放UIView。 你可以這樣做

self.transform = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale); 

例如。

+0

不幸的是CGAffineTransformIdentity在Swift中不可用 – stevenpcurtis