[ 2022-08-17 ๐Ÿค– TIL ]

Burkeyยท2022๋…„ 8์›” 17์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
15/157
๐Ÿ˜Ž ๋งˆํฌ๋‹ค์šด์„ ๊ณต๋ถ€ํ–ˆ์œผ๋‹ˆ ์ ์šฉ์„ ํ•ด๋ณด๊ธฐ๋กœ
import UIKit

class ViewController: UIViewController {
    let numOfTouchs = 2

    @IBOutlet var imgViewUp: UIImageView!
    @IBOutlet var imgViewLeft: UIImageView!
    @IBOutlet var imgViewRight: UIImageView!
    @IBOutlet var imgViewDown: UIImageView!
    
    var imgLeft = [UIImage]()
    var imgDown = [UIImage]()
    var imgUp = [UIImage]()
    var imgRight = [UIImage]()
    //์•„๋งˆ์ž ๋ฐฐ์—ด์— ์ถ”๊ฐ€

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        imgUp.append(UIImage(named: "arrow-up-black.png")!)
        imgUp.append(UIImage(named: "arrow-up-red.png")!)
        imgUp.append(UIImage(named: "arrow-up-green.png")!)

        imgDown.append(UIImage(named: "arrow-down-black.png")!)
        imgDown.append(UIImage(named: "arrow-down-red.png")!)
        imgDown.append(UIImage(named: "arrow-down-green.png")!)

        imgLeft.append(UIImage(named: "arrow-left-black.png")!)
        imgLeft.append(UIImage(named: "arrow-left-red.png")!)
        imgLeft.append(UIImage(named: "arrow-left-green.png")!)
        
        imgRight.append(UIImage(named: "arrow-right-black.png")!)
        imgRight.append(UIImage(named: "arrow-right-red.png")!)
        imgRight.append(UIImage(named: "arrow-right-green.png")!)
        
        imgViewUp.image = imgUp[0]
        imgViewDown.image = imgDown[0]
        imgViewRight.image = imgRight[0]
        imgViewLeft.image = imgLeft[0]
        //์ฒ˜์Œ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ์ด๋ฏธ์ง€๋ฅผ ๋ฝ‘์•„์™€ ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ
        
        let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
        swipeUp.direction = UISwipeGestureRecognizer.Direction.up
        self.view.addGestureRecognizer(swipeUp)
        
        let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
        swipeDown.direction = UISwipeGestureRecognizer.Direction.down
        self.view.addGestureRecognizer(swipeDown)
        
        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
        swipeRight.direction = UISwipeGestureRecognizer.Direction.right
        self.view.addGestureRecognizer(swipeRight)
        
        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
        swipeLeft.direction = UISwipeGestureRecognizer.Direction.left
        self.view.addGestureRecognizer(swipeLeft)
        
        //ํ™”๋ฉด์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์Šค์ณ๋ฅผ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.(ํ•œ์†๊ฐ€๋ฝ์œผ๋กœ ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ ์Šค์™€์ดํ”„)
        //์Šค์™€์ดํ”„ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์„ ์–ธํ•ด ๋†“์€ respondToSwipeGesture ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋˜๋„๋ก ์„ ์–ธ
        
        let swipeUpMulti = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGestureMulti(_:)))
        swipeUpMulti.direction = UISwipeGestureRecognizer.Direction.up
        swipeUpMulti.numberOfTouchesRequired = numOfTouchs
        self.view.addGestureRecognizer(swipeUpMulti)
        
        let swipeDownMulti = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGestureMulti(_:)))
        swipeDownMulti.direction = UISwipeGestureRecognizer.Direction.down
        swipeDownMulti.numberOfTouchesRequired = numOfTouchs
        self.view.addGestureRecognizer(swipeDownMulti)
        
        let swipeRightMulti = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGestureMulti(_:)))
        swipeRightMulti.direction = UISwipeGestureRecognizer.Direction.right
        swipeRightMulti.numberOfTouchesRequired = numOfTouchs
        self.view.addGestureRecognizer(swipeRightMulti)
        
        let swipeLeftMulti = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGestureMulti(_:)))
        swipeLeftMulti.direction = UISwipeGestureRecognizer.Direction.left
        swipeLeftMulti.numberOfTouchesRequired = numOfTouchs
        self.view.addGestureRecognizer(swipeLeftMulti)
        
        //ํ™”๋ฉด ์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์Šค์ณ๋ฅผ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.(๋‘ ์†๊ฐ€๋ฝ์œผ๋กœ ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ ์Šค์™€์ดํ”„)
        //์Šค์™€์ดํ”„ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์„ ์–ธํ•ด ๋†“์€ respondToSwipeGestureMulti ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋˜๋„๋ก ์„ ์–ธ
    }
    
    @objc func respondToSwipeGesture(_ gesture: UIGestureRecognizer){
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            imgViewUp.image = imgUp[0]
            imgViewDown.image = imgDown[0]
            imgViewLeft.image = imgLeft[0]
            imgViewRight.image = imgRight[0]

            switch swipeGesture.direction {
                case UISwipeGestureRecognizer.Direction.up :
                    imgViewUp.image = imgUp[1]
                case UISwipeGestureRecognizer.Direction.down :
                    imgViewDown.image = imgDown[1]
                case UISwipeGestureRecognizer.Direction.right :
                    imgViewRight.image = imgRight[1]
                case UISwipeGestureRecognizer.Direction.left :
                    imgViewLeft.image = imgLeft[1]
                default :
                    break
            }}
        //์ œ์Šค์ณ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ œ์Šค์ณ ๋ฐฉํ–ฅ์— ๋งž๋Š” ํ™”์‚ดํ‘œ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ
    }
    
    @objc func respondToSwipeGestureMulti(_ gesture: UIGestureRecognizer){
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            imgViewUp.image = imgUp[0]
            imgViewDown.image = imgDown[0]
            imgViewLeft.image = imgLeft[0]
            imgViewRight.image = imgRight[0]

            switch swipeGesture.direction {
                case UISwipeGestureRecognizer.Direction.up :
                    imgViewUp.image = imgUp[2]
                case UISwipeGestureRecognizer.Direction.down :
                    imgViewDown.image = imgDown[2]
                case UISwipeGestureRecognizer.Direction.right :
                    imgViewRight.image = imgRight[2]
                case UISwipeGestureRecognizer.Direction.left :
                    imgViewLeft.image = imgLeft[2]
                default :
                    break
            }}
        //์ œ์Šค์ณ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ œ์Šค์ณ ๋ฐฉํ–ฅ์— ๋งž๋Š” ํ™”์‚ดํ‘œ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ
    }
}

์™€..์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ด๋ป์กŒ๋‹ค. ์ด๊ฑธ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋‹ค๋‹ˆ!

๋งˆํฌ๋‹ค์šด ๊ด€๋ จ ๊ณต๋ถ€๋Š” ๋‚˜์ค‘์— ์ด์–ด์„œ ํ•˜๊ณ 
์ผ๋‹จ ์˜ค๋Š˜์€ swift๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ฑ์— ์Šค์™€์ดํ”„ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ
๋ฐœ์ƒํ•œ ๋ฐฉํ–ฅ์— ๋งž๋Š” ํ™”์‚ดํ‘œ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

UISwipeGestureRecognizer ํด๋ž˜์Šค๊ฐ€ ์Šค์™€์ดํ”„ ์ด๋ฒคํŠธ์˜ ๋ฐฉํ–ฅ์„ ์ธ์‹ํ•˜๊ณ  ๊ทธ์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค.
swipeLeftMulti.numberOfTouchesRequired = numOfTouchs๋Š” ์Šค์™€์ดํ”„์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ธ์‹๋œ ํ„ฐ์น˜?์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์˜ค๋Š˜์€ #selector์— ๋Œ€ํ•˜์—ฌ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ ๋”ฐ๋กœ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.


๋ฉ”์„œ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ selector(์…€๋ ‰ํ„ฐ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์œ„์— ์‚ฌ์šฉํ•œ UISwipeGestureRecognizer ํด๋ž˜์Šค์—์„œ (target: Any?, action: Selector?) ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์…€๋ ‰ํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์„ ์–ธ ํ•ด์ฃผ์–ด ๋„˜๊ฒจ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์…€๋ž™ํ„ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” ๊ผญ ์•ž์— Objective-C์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”@objc ๋ฅผ ๋ถ™์—ฌ์„œ ์„ ์–ธ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋„์›€:
https://velog.io/@kipsong/SwiftobjcUIKit-Seletor%EC%85%80%EB%A0%89%ED%84%B0%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
https://woozzang.tistory.com/120

profile
์Šคํƒฏ ์˜ฌ๋ฆฌ๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€