2016-05-14 59 views
0

這裏是我的代碼拖動周圍的UITextField UIView的(SWIFT)

import UIKit 

class ForwardTextField: UITextField { 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
override func drawRect(rect: CGRect) { 
    // Drawing code 
} 
*/ 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    super.touchesBegan(touches, withEvent: event) 
    self.nextResponder()!.touchesBegan(touches, withEvent: event) 
    NSLog("Textfield Touches Began") 
} 
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    super.touchesMoved(touches, withEvent: event) 
    self.nextResponder()!.touchesMoved(touches, withEvent: event) 
    NSLog("Textfield Touches Moved") 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    super.touchesEnded(touches, withEvent: event) 
    self.nextResponder()!.touchesEnded(touches, withEvent: event) 
    NSLog("Textfield Touches Ended") 
} 

override func touchesCancelled(

    touches: Set<UITouch>?, withEvent event: UIEvent?) { 
    super.touchesCancelled(touches, withEvent: event) 
    self.nextResponder()!.touchesCancelled(touches, withEvent: event) 
    //NSLog(@"Textfield Touches Cancelled"); 
} 
// placeholder position 

override func textRectForBounds(bounds: CGRect) -> CGRect { 
    return CGRectInset(bounds, 10, 10) 
} 
// text position 

override func editingRectForBounds(bounds: CGRect) -> CGRect { 
    return CGRectInset(bounds, 10, 10) 
} 

}

我繼承我的UITextField和我試圖拖動周圍的景色,但我不知道我做錯了。當第一次觸摸它不能拖動,但在第二次觸摸它跳到另一個位置,可以draggable.Can任何人都可以幫助我解決這個問題,它已經有一段時間了,現在仍然堅持這一點。我試圖做一些像snapchat textfield這是可拖動的。

var textField = ForwardTextField() 


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("TOUCHES BEGAN\n ") 
    print("self.textfield == nil = \(self.view.subviews.contains(self.textField))\n") 




    self.isDrawing = false 
    if !self.view.subviews.contains(self.textField){ 
     self.textFieldY = 80.0 
     self.textField = ForwardTextField(frame: CGRectMake(0.0, self.textFieldY, self.view.frame.size.width, 40.0)) 
     self.textField.borderStyle = .None 
     self.textField.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.4) 
     //self.textField.alpha = 0.4; 
     self.textField.textColor = UIColor.whiteColor() 
     self.textField.returnKeyType = .Done 
     self.textField.delegate = self 
     //ADDED 
     //self.textField.userInteractionEnabled = true 
     self.textField.multipleTouchEnabled = false 
     self.textField.exclusiveTouch = false 
     self.textField.textAlignment = .Center 
     self.view.addSubview(self.textField) 
     print("Show Text BOx") 
     if self.textField.hidden == true { 
      self.textField.hidden = false 
     } 
     self.textField.becomeFirstResponder() 

    }else { 

     let touch: UITouch = touches.first! 
     //NSLog(@"touchesBegan"); 
     let point: CGPoint = touch.locationInView(self.view) 
     if self.view.subviews.contains(self.textField) && CGRectContainsPoint(self.textField.frame, point) && !self.textField.hidden{ 

      self.isMovingText = true 


     } 
     if self.isDrawing { 
      self.lastPoint = point 
     } 

    } 


} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("TOUCHES MOVED ") 
    print("ISMOVING TEXT = \(isMovingText)") 
    if self.isMovingText { 
     print("MOVESSSS") 
     let touch: UITouch = touches.first! 
     var point: CGPoint = touch.locationInView(self.view) 
     self.textFieldY = point.y 
     self.textField.frame = CGRectMake(0.0, point.y, self.textField.frame.size.width, self.textField.frame.size.height) 
     self.view.setNeedsDisplay() 
    } 
    if self.isDrawing { 
     //NSLog(@"touchmoved"); 
     var touch: UITouch = touches.first! 
     var currentPoint: CGPoint = touch.locationInView(self.view) 
     self.image.drawAtPoint(CGPointMake(0.0, 0.0)) 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y) 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y) 
     CGContextSetLineCap(UIGraphicsGetCurrentContext(), .Round) 
     CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush) 
     CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), self.drawColor.CGColor) 
     CGContextSetBlendMode(UIGraphicsGetCurrentContext(),.Normal) 
     CGContextStrokePath(UIGraphicsGetCurrentContext()) 
     self.image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     self.lastPoint = currentPoint 
     self.view.setNeedsDisplay() 
    } 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    if self.isMovingText == true { 
     var touch: UITouch = touches.first! 
     var point: CGPoint = touch.locationInView(self.view) 
     self.textFieldY = point.y 
     self.textField.frame = CGRectMake(0.0, point.y, self.textField.frame.size.width, self.textField.frame.size.height) 
     self.view.setNeedsDisplay() 
     self.isMovingText = false 
    } 
    if self.isDrawing { 
     //NSLog(@"touchended"); 
     self.image.drawAtPoint(CGPointMake(0.0, 0.0)) 
     CGContextSetLineCap(UIGraphicsGetCurrentContext(),.Round) 
     CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush) 
     CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), self.drawColor.CGColor) 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y) 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y) 
     CGContextStrokePath(UIGraphicsGetCurrentContext()) 
     CGContextFlush(UIGraphicsGetCurrentContext()) 
     self.image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     self.view.setNeedsDisplay() 
    } 
} 
+1

在代碼中寫評論是'//不是羞愧' –

+0

@DanielKrom你讓我笑了^^ – Coder1000

回答

0

雖然沒有在文檔說,大約拖UITextField

這似乎是一個不錯的主意(我認爲)作爲一個的UITextField的目的是接受用戶的文本輸入,但是,我沒有測試成功用帶有UIView父項的UIView內的UITextField拖動UIView。

我會從你的UITextField中刪除所有的觸摸代碼。子類UIView並添加一個touchesMoved方法來覆蓋;裏面得到的位置和使用UIView.center。

工作對我很好。在Swift 2.2和3上都測試過。