4

ドラッグ可能でアニメーション可能な円形の Slider を作りたかったのです。これまでのところ、スライダーを作成し、ドラッグ ハンドルを使用してスライダーを動かしたり、アニメーション化したりすることができました。アニメーションがうまくいかない場合があります (間違った方向または最短方向)。UIView をサブクラス化しました (すぐに UIControl になります。最初にアニメーションを正しく取得したかっただけです)。PanGestureRecognizer と描画用のいくつかのレイヤーを追加しました。

ここに画像の説明を入力

では、この奇妙な動作を修正するにはどうすればよいでしょうか。私は誰かがここで私を助けることができました、私は感謝します:)

サンプルプロジェクトはこちら -> http://cl.ly/2l0O3b1I3U0X

どうもありがとう!

編集:

描画コードは次のとおりです。

CALayer *aLayer = [CALayer layer];
aLayer.bounds = CGRectMake(0, 0, 170, 170);
aLayer.position = self.center;
aLayer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);

self.handleHostLayer = [CALayer layer];
self.handleHostLayer.bounds = CGRectMake(0, 0, 170, 170);
self.handleHostLayer.position = CGPointMake(CGRectGetMaxX(aLayer.bounds) - 170/2.0, CGRectGetMaxY(aLayer.bounds) - 170/2.0);

[aLayer addSublayer:self.handleHostLayer];
[self.layer addSublayer:aLayer];

self.handle = [CALayer layer];
self.handle.bounds = CGRectMake(0, 0, 50, 50);
self.handle.cornerRadius = 25;
self.handle.backgroundColor = [UIColor whiteColor].CGColor;
self.handle.masksToBounds = NO;
self.handle.shadowOffset = CGSizeMake(3.0, 0.0);
self.handle.shadowRadius = 0;
self.handle.shadowOpacity = .15;
self.handle.shadowColor = [UIColor blackColor].CGColor;

[self.handleHostLayer addSublayer:self.self.handle];

アニメーションコードは次のとおりです。

CGFloat handleTarget = ToRad(DEG);

CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotationAnimation.fromValue = @([[self.handleHostLayer valueForKeyPath:@"transform.rotation"] floatValue]);
rotationAnimation.toValue = @(handleTarget);
rotationAnimation.duration = .5;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.cumulative = YES;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

[self.handleHostLayer addAnimation:rotationAnimation forKey:@"transform.rotation"];
4

1 に答える 1