2017-04-17 120 views
2

Swift 3.0沒有名爲CGAffineTransformScale的方法。Swift 3.0中的CGAffineTransformScale

func didPinchGesture(pinchRecognizer : UIPinchGestureRecognizer) { 
    if let view = pinchRecognizer.view { 
    view.transform = CGAffineTransformScale(view.transform, 
          recognizer.scale, recognizer.scale) 
    pinchRecognizer.scale = 1 
    } 
} 

scaleBy不會自動完成,但加入CGAffineTransformscaleBy拋出錯誤,因爲scale已不再CGAffineTransform的屬性: CGAffineTransform.scaledBy(view.transform, pinchRecognizer.scale, pinchRecognizer.scale)

用Swift 3.0配置捏手勢識別器的最佳方式是什麼?

回答

8

在斯威夫特,CGAffineTransformScale導入爲在CGAffineTransform結構的實例方法,稱爲scaledBy(x:y:)

view.transform = view.transform.scaledBy(x: recognizer.scale, y: recognizer.scale) 
+0

我添加鏈接到文檔 – Alexander

+0

謝謝,@亞歷山大。我應該寫些什麼來改善我的問題? – Eric

+0

@Eric並不是真的,但是在回答之前儘可能多花一點努力去搜索這些東西。許多Cocoa API被實現爲C結構體(比如'CGAffineTransform'),並且有一組全局函數作用於它們(比如'CGAffineTransformScale'),因爲它們提供比Objective C類/實例方法更快的性能。 Swift原生支持結構,並支持結構上的實例方法,所以這樣的C API被導入爲本地Swift結構,並且它們相應的全局函數作爲實例方法被導入到這些本地Swift結構中。 – Alexander

1

您可以使用一個尺度變換斯威夫特3這樣的:

if let view = pinchRecognizer.view { 
    view.transform = CGAffineTransform(scaleX: recognizer.scale, y: recognizer.scale) 
    ... 
    } 
+1

這只是一個新的變換。 – Alexander