2016-01-26 2 views
1

Я пытаюсь перетащить UIImageView по экрану, коснувшись экрана. Но я хочу иметь возможность делать постоянное движение Sprite, в настоящее время мой код только перемещает спрайт на место моего прикосновения, и если я держусь при касании на экране в течение некоторого времени, а затем двигаюсь, спрайт будет следовать. Однако я не хочу «иметь» касаться UIImageView, чтобы активировать движение, я хочу коснуться в любом месте экрана и получить ответ от этого UIImageView, с его текущего местоположения.Как перетащить UIImageView с помощью метода touchs

Вот мой код.

var location = CGPoint() 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     location = touch.locationInView(self.view) 
     ImageView.center = location} 

} 

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

Благодарим за любую помощь, которую вы можете предоставить.

ответ

1

Вот более простой реализации. Просто запомните последнее местоположение касания и вычислите разницу, и используйте разницу, чтобы установить новое местоположение изображения.

var lastLocation = CGPoint() 
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     self.lastLocation = touch.locationInView(self.view) 
    } 
} 
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     let location = touch.locationInView(self.view) 
     self.imageView.center = CGPoint(x: (location.x - self.lastLocation.x) + self.imageView.center.x, y: (location.y - self.lastLocation.y) + self.imageView.center.y) 
     lastLocation = touch.locationInView(self.view) 
    } 
} 
0

Вот код, который я пишу для UIImageView. Вместо img вам необходимо использовать объект sprite.

необходимо создать 3 глобальных переменных.

var offset: CGPoint 
var isHold: Bool 
var timerToCheckHold: NSTimer 

использовать тронутый метод.

func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) { 
    var touch: UITouch = touches.first! 
    var location: CGPoint = touch.locationInView(self.view!) 
    var imgCenter: CGPoint = img.center 
    offset = CGPointMake(img.center.x - location.x, imgCenter.y - location.y) 
    timerToCheckHold = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "timerToUpdateHold", userInfo: nil, repeats: false) 
} 

func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent) { 
    if timerToCheckHold != nil && timerToCheckHold.isValid() { 
     timerToCheckHold.invalidate() 
    } 
    if isHold { 
     var touch: UITouch = touches.first! 
     var location: CGPoint = touch.locationInView(self.view!) 
     var newcenter: CGPoint = CGPointMake(offset.x + location.x, offset.y + location.y) 
     img.center = newcenter 
    } 
} 

func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent) { 
    if timerToCheckHold != nil && timerToCheckHold.isValid() { 
     timerToCheckHold.invalidate() 
    } 
    isHold = false 
} 

Кроме того, необходимо реализовать метод по таймеру Через

func timerToUpdateHold() { 
    isHold = true 
} 
+0

он говорит недействительным переопределение 'timerToCheckHold()' –

+0

Я обновил этот вопрос. Измените имя метода с timerToCheckHold() на timerToUpdateHold(). Пожалуйста, проверьте сейчас –

Смежные вопросы