2017-08-20 24 views
1

水平線を垂直方向に移動するにはどうすればよいですか? 直線の直線を描くことができ、長押しで移動する必要があります。 どうすればいいですか?あなたは何ができるか行を移動するには?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
{ 
    if let touch = touches.first 
    { 
     let currentPoint = touch.location(in: self.view) 
     DrawLine(FromPoint: currentPoint, toPoint: currentPoint) 
    } 
} 
func DrawLine(FromPoint: CGPoint, toPoint: CGPoint) 
{ 
    UIGraphicsBeginImageContext(self.view.frame.size) 
    imageView.image?.draw(in: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 
    let context = UIGraphicsGetCurrentContext() 
    let lineWidth : CGFloat = 5 
    context?.move(to: CGPoint(x: FromPoint.x, y: FromPoint.y)) 
    context?.addLine(to: CGPoint(x: FromPoint.x + 200, y: FromPoint.y)) 
    context?.setBlendMode(CGBlendMode.normal) 
    context?.setLineCap(CGLineCap.round) 
    context?.setLineWidth(lineWidth) 
    context?.setStrokeColor(UIColor(red: 0, green: 0, blue: 0, alpha: 1.0).cgColor) 
    context?.strokePath() 
    imageView.image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 

答えて

0

あなたはUIViewのを使用して水平線を描くことができますし、必要なオプションを指定して、UIView.animateメソッドを使用して垂直方向に移動できます。あなたのViewController定義以下の変数で

var scanlineRect = CGRect.zero 
var scanlineStartY: CGFloat = 0 
var scanlineStopY: CGFloat = 0 
var topBottomMargin: CGFloat = 30 
var scanLine: UIView = UIView() 

コールdrawLine方法内部のviewDidLoad方法と、あなたのタッチイベントにmoveVerticallyメソッドを呼び出します。

func drawLine() { 
     self.addSubview(scanLine) 
     scanLine.backgroundColor = UIColor(red: 0.4, green: 0.8, blue: 0.4, alpha: 1.0) // green color 
     scanlineRect = CGRect(x: 0, y: 0, width: self.frame.width, height: 2) 
     scanlineStartY = topBottomMargin 
     scanlineStopY = self.frame.size.height - topBottomMargin 
    } 

func moveVertically() { 
     scanLine.frame = scanlineRect 
     scanLine.center = CGPoint(x: scanLine.center.x, y: scanlineStartY) 
     scanLine.isHidden = false 
     weak var weakSelf = scanLine 
     UIView.animate(withDuration: 1.0, delay: 0.0, options: [.repeat, .autoreverse, .beginFromCurrentState], animations: {() -> Void in 
      weakSelf!.center = CGPoint(x: weakSelf!.center.x, y: scanlineStopY) 
      }, completion: nil) 
    } 
+0

3行があればどうなりますか?どのように私はそれらを区別し、必要なものを移動することができますか? – Vladislav

+0

フレームCGRectをメソッドに渡して3行を描画し、移動する行インスタンスに対してmoveVerticallyメソッドを呼び出すことができます。したがって、上記のコードを要件ごとに変更することができます。 –

+0

上記のコードは、線を引いてそれを垂直方向に移動するコードです。 –

0

UIViewの上でこの線を引くと、上向きまたはあなたがそうのようにしたい任意の位置にUIViewのを移動することです:

UIView.animate(withDuration: 0.3, animations: { 
       yourView.origin = CGPoint(yourView.frame.origin.x, yourYPosition) 

      }, completion: { (value: Bool) in 
       //do anything after animation is done 
      }) 
+0

をすることは可能ですUIImageViewを使用してそれを行うのですか? – Vladislav

+0

もちろん、UIViewをUIImageViewに置き換えてください –

関連する問題