2017-08-20 25 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

UIView的什么,如果我有3条线?我如何区分它们并移动所需的? – Vladislav

+0

您可以通过将框架CGRect传递给方法来绘制三条线,并调用要移动的线条实例的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

是,刚刚更换的UIImageView –