2015-11-16 69 views
0

移至Swift/iOS。我正在嘗試在touchesmoved被調用時移動UIImageView。但是,我似乎無法得到它的工作。 touchesMoved不會找到與touch.view相匹配的子視圖,因此不會移動子視圖。iOS/Swift:使用touchesmoved將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類的更多,因爲「模式」和「觀點」類兩種完全不同類型的標準模型 - 視圖 - 控制器模式的對象。

+0

謝謝,這是有道理的。那麼是否有觸摸的屬性可以用來查找相應的視圖一個移動呢? –

+0

'touch.view'是觸摸開始的視圖,如果您使用觸摸拖動視圖,通常就是您想要使用的視圖。如果你想移動一個圖像視圖,你有幾個選項。一種是在觸摸開始之前將圖像視圖添加到視圖層次結構中,這樣'touch.view' *就是您正在移動的視圖。另一個是繼續做你正在做的事情,但跟蹤你通過其他方式(伊娃或財產)插入的圖像視圖,然後移動它。無論哪種方式,您都不需要遍歷所有子視圖以找到要移動的子視圖。 – Caleb