2015-11-16 4 views
0

новое для Swift/iOS. Я пытаюсь переместить UIImageView, когда вызывается touchhesmoved. Но я не могу заставить его работать. ПрикосновенияМожет не найти subview, который соответствует touch.view и, следовательно, не будет перемещать subview.iOS/Swift: Использование touchhesmoved для перемещения UIImageView

В представлении есть UILabels, которые работают с функцией touchesMoved, но UIImageViews не будет.

Любые идеи были бы очень полезными. Благодарю.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let touch = touches.first as UITouch! 
    let location = touch.locationInView(view) 

    let imageView = TouchPointModel(frame: CGRectMake(location.x - frameSize * 0.5, location.y - frameSize * 0.5, frameSize, frameSize), image: UIImage(named: "Feedback_Winner.png")!) 

    view.addSubview(imageView) 
} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    for touch:AnyObject in touches { 
     let location = touch.locationInView(view) 

     for subview in view.subviews { 
      if touch.view == subview { 
       print("yahtzee") 
       subview.center = location 
      } 
     } 
    } 
} 

Вот TouchPointModel для справки:

class TouchPointModel: UIImageView { 
    init(frame:CGRect, image:UIImage) { 
     super.init(frame: frame) 
     self.image = image 
     self.opaque = false 
     self.userInteractionEnabled = true 

     UIView.animateWithDuration(1.0, delay: 0.0, options: [.Repeat, .Autoreverse], animations: { 
      self.transform = CGAffineTransformMakeScale(1.3, 1.3) 
     }, completion: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

ответ

1

Похоже, вы пытаетесь добавить вид изображения в точке, где прикосновение начинается, но view свойство налетом никогда не меняется. То есть, touch.view не меняется при перемещении пальца в разные виды, и по этой причине touch.view никогда не будет соответствовать изображению, которое вы добавляете в touchesBegan(withEvent).

PS: Это более чем немного запутанно назвать ваш класс TouchPointModel, так как классы «model» и «view» представляют собой два совершенно разных вида объектов в стандартной парадигме Model-View-Control.

+0

спасибо, это имеет смысл. так есть ли свойство прикосновения, которое можно использовать, чтобы найти соответствующий вид? –

+0

'touch.view' - это вид, в котором началось касание, и обычно это тот, с которым вы хотите пойти, если вы используете касание, чтобы перетащить вид. Если вы хотите переместить представление изображения вокруг, у вас есть пара вариантов. Один из них заключается в том, чтобы добавить представление изображения в иерархию представления до начала касания, так что 'touch.view' * - это вид, который вы перемещаете. Другое - продолжать делать то, что вы делаете, но отслеживать изображение, которое вы вставляете другими средствами (ivar или свойство), а затем переместить это. В любом случае вам не нужно будет перебирать все ваши подпункты, чтобы найти тот, который нужно переместить. – Caleb

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