추가 기능을 수행하지 않고 동일한 기능에서 코드를 다시 사용하고 싶습니다.
내 pinchGesture
. ended
이제 코드에 표시된대로이 코드를 호출하고 싶습니다.
func isParformPinch(recognizer:UIPinchGestureRecognizer, forTag tag:Int, protectedTag protact:Int){
if protact == tag{
return
}
//THIS PART CALL AGAIN
if isPinching(forView: imageArray[tag],inView: recognizer.view!, fromTransformation: recognizer.scale) {
imageArray[tag].transform = imageArray[tag].transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
}
if recognizer.state == .ended{
// call again above condition
}
}
나는 당신이 성취하고 싶은 것을 완전히 이해하고 있는지 확신하지 못하지만, 당신이 찾고있는 것은 클로저 (Objective-C 블록 과 동일) 개념이라고 생각합니다 .
func isParformPinch(recognizer:UIPinchGestureRecognizer, forTag tag:Int, protectedTag protact:Int){
if protact == tag{
return
}
// Declare your block: it's kind of a function-variable
let myBlock = {
if isPinching(forView: imageArray[tag],inView: recognizer.view!, fromTransformation: recognizer.scale) {
imageArray[tag].transform = imageArray[tag].transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
}
}
// Execute your block whenever you need to
myBlock()
if recognizer.state == .ended {
// call again above condition
myBlock()
}
}
클로저는 강력하지만 조작하기 쉽지 않은 기능이므로 자세히 읽어 보시기 바랍니다 . https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
편집 : Grimxn 이 주석에서 지적했듯이 더 깨끗한 방법은 로컬 함수를 사용하는 것입니다.
func isParformPinch(recognizer:UIPinchGestureRecognizer, forTag tag:Int, protectedTag protact:Int){
if protact == tag{
return
}
// Declare your local function
func myLocalFunction() {
if isPinching(forView: imageArray[tag],inView: recognizer.view!, fromTransformation: recognizer.scale) {
imageArray[tag].transform = imageArray[tag].transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
}
}
// Execute your function whenever you need to
myLocalFunction()
if recognizer.state == .ended {
// call again above condition
myLocalFunction()
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다