1

オブジェクトが に沿ってその位置をアニメートするアニメーションを作成したいと考えていますpath。私が抱えている問題はpath、すべての画面サイズで機能するというこの動的な意味を作ることです。

path上の gif の宇宙船は、最初は「U」の形をしています。

私はこの「U」形状を使用しpathていますが、これは機能します。コードは次のとおりです。

func animateAlongPath() {
    // Create and add image to view
    let myImage = UIImage(named: "myImage")!
    let myImageView = UIImageView(image: myImage)

    myImageView.frame = CGRect(x: 100, y: 100, width: myImage.size.width, height: myImage.size.height)
    holderView.addSubview(myImageView)

    // Create "U" shape path for animation (path code created in PaintCode)
    let path = UIBezierPath()
    path.moveToPoint(CGPointMake(59.5, 81.5))
    path.addCurveToPoint(CGPointMake(66.5, 91.5), controlPoint1: CGPointMake(63.64, 84.13), controlPoint2: CGPointMake(62.62, 85.9))
    path.addCurveToPoint(CGPointMake(81.5, 110.5), controlPoint1: CGPointMake(72.31, 99.88), controlPoint2: CGPointMake(75.91, 103.08))
    path.addCurveToPoint(CGPointMake(109.5, 142.5), controlPoint1: CGPointMake(88.44, 119.71), controlPoint2: CGPointMake(102.39, 135.23))
    path.addCurveToPoint(CGPointMake(145.5, 156.5), controlPoint1: CGPointMake(122.47, 155.76), controlPoint2: CGPointMake(129.15, 157.54))
    path.addCurveToPoint(CGPointMake(237.5, 81.5), controlPoint1: CGPointMake(185.04, 153.99), controlPoint2: CGPointMake(237.5, 81.5))

    let pathAnimation = CAKeyframeAnimation(keyPath: "position")
    pathAnimation.path = path.CGPath // Use "U" shape path for animation
    pathAnimation.calculationMode = kCAAnimationPaced
    pathAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)]
    pathAnimation.duration = 1
    pathAnimation.removedOnCompletion = false
    pathAnimation.fillMode = kCAFillModeForwards

    myImageView.layer.addAnimation(pathAnimation, forKey: nil)
    myImageView.layer.position = path.currentPoint
}

問題は、UIBezierPathが動的でないことです。iPhone 6 デバイスの画面サイズではうまく機能しますが、静的であるため、他のデバイス サイズではうまく機能しません。PaintCode を使用して、変数を使用して動的パスを作成しようとしましたが、うまくいきません。

何か案は?

4

1 に答える 1

0

PaintCode は、 FramesUIBezierPathsを使用してサイズ変更可能なコードを生成できます。

BezierをFrameオブジェクト内に配置し、必要な自動サイズ変更スプリングを設定します (すべて柔軟です)。結果のコードは/でパラメータ化され、相対係数を使用してベジェ ポイントを計算します。CGRectNSRect

さらに詳しく知りたい場合は、 Dynamic Shapesに関するビデオ チュートリアルもあります。

フレーム内の PaintCode ベジエ

于 2016-04-18T18:26:06.263 に答える