2016-05-14 5 views
0

は私のコードドラッグのUITextField(スウィフト)ここで

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のサブクラスを作成し、私はビューの周りにドラッグしようとしていたが、私が間違ってやっていたところ、私は知りません。最初のタッチはドラッグできませんが、2回目のタッチでは別の位置にジャンプし、ドラッグ可能にすることができます。これを解決するのに役立つ人はいますか?今はまだこれに固執しています。スナップチャットのテキストフィールドこれはドラッグ可能です。

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内でUITextFieldを持つUIViewをUIViewの親を使用してドラッグします。

あなたのUITextFieldからすべてのタッチコードを削除します。 UIViewをサブクラス化し、オーバーライドするtouchesMovedメソッドを追加します。内部の場所を取得し、UIView.centerでそれを使用します。

私のために働いた。速い2.2と3の両方でテストされました。

関連する問題