質問をする前に、私はそうで検索しました:ビュー/レイヤーのベジェ曲線パスへの移動パスを制約する方法はありますか?
iPhone-Move UI Image view along a Bezier curve path
しかし、それは明示的な答えを与えていません。
私の要件は次のとおりです。ベジエパスとビュー(またはレイヤーがあればOK)があり、ビューにpan gesture
を追加し、ビュー(またはレイヤー)の移動パスがベジェパス。
私のコードは以下の通りです:
MainDrawView.swift
:
import UIKit
class MainDrawView: UIView {
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
drawArc()
}
func drawArc() {
let context = UIGraphicsGetCurrentContext()
// set start point
context?.move(to: CGPoint.init(x: 0, y: 400))
//draw curve
context?.addQuadCurve(to: CGPoint.init(x: 500, y: 250), control: CGPoint.init(x: UIScreen.main.bounds.size.width, y: 200))
context?.strokePath()
}
}
ViewController.swift
:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var clickButton: UIButton!
lazy var view1:UIView = {
let view: UIView = UIView.init(frame: CGRect.init(origin: CGPoint.init(x: 0, y: 0), size: CGSize.init(width: 10, height: 10)))
view.center = CGPoint.init(x: UIScreen.main.bounds.size.width/2.0, y: UIScreen.main.bounds.size.height/2.0)
view.backgroundColor = UIColor.red
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
initData()
initUI()
}
func initData() {
}
func initUI() {
self.clickButton.isHidden = true
// init the view
self.view.addSubview(self.view1)
}
}
編集-1
私の深い需要量は、私はビュー/レイヤーを移動pan guester
使用する場合、ビューは、ベジェパスに移動しますです。
CALayersになることはできますか?少なくとも私の意見では、UIViewsを達成するのはずっと簡単です。 1つのUIViewに複数のCALayerを含めることができます。これがうまくいくなら、私はそのトリックを行うかもしれないコードを持っています。 – dfd
@dfd、ok、use CALayerも実装できます。 – aircraft
@aircraft - あなたが正しくあなたが理解していることは、あなたがユーザーに 'UIPanGestureRecognizer'をアクティブにさせようとしていることです。そしてその更新として、四角形はパスに沿って移動しますか? – Pierce