ビューを右から左に回転する方法を知っています
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
transform.m34 = 0.0015;
view.layer.transform = transform;
しかし、私はそれを左から右に回転させることはできません。私を助けてください。
ビューを右から左に回転する方法を知っています
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
transform.m34 = 0.0015;
view.layer.transform = transform;
しかし、私はそれを左から右に回転させることはできません。私を助けてください。
「左から右」と「右から左」の意味がわかりません。とにかく、あなたが発見したように、変換マトリックスを設定するだけではアニメーションの方向を制御することはできません.回転させたい。
代わりに、レイヤーのキー パスをアニメートできますtransform.rotation.y
。これは、(ビューによって制御されない) 独立したレイヤーではなく、ビューのレイヤーをアニメーション化する必要があるため、少し複雑です。
とにかく、ここに私がテストしたコードがあります:
- (IBAction)rotateButtonWasTapped:(id)sender {
// Establish the perspective to be used during the animation.
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 0.0015;
self.imageView.layer.transform = transform;
static CGFloat kAngle = -M_PI;
[CATransaction begin]; {
// After the animation completes, make the transform “permanent”. Otherwise it
// will be undone when the animation is removed from the layer.
[CATransaction setCompletionBlock:^{
self.imageView.layer.transform = CATransform3DRotate(transform, kAngle, 0, 1, 0);
}];
// Animate the rotation using Core Animation's extension to Key Value Coding.
// The sign of kAngle determines the direction of rotation.
CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.y"];
animation.fromValue = @0;
animation.toValue = @(kAngle);
animation.duration = 1;
[self.imageView.layer addAnimation:animation forKey:animation.keyPath];
} [CATransaction commit];
}
これにより、回転中にビューの左端がユーザーに「近づく」ようにビューが回転します。それが「左から右」の意味でない場合は、 の定義を に変更するkAngle
とM_PI
、反対方向に回転します。私は両方の方法をテストしました。1 つのアニメーションでレイヤーを複数回スピンすることもできます。たとえば、 として定義kAngle
してみてください-3 * M_PI
。
-(void)updateTimer { if(update<125) update=update+1;
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval interval = now - start;
int inter = (int)(interval*update);
inter*=10;
milliSec = (inter) % 1000;
seconds = (inter/1000) % 60;
minutes = (inter/60000) % 60;
timeValue = oldTimeValue+inter;
// Set Digital clock
// Set Analog clock hands
secHand.layer.transform = CATransform3DMakeRotation (Degrees2Radians(-(timeValue%1000)*360/1000), 0, 0, 1);
}
関数のドキュメントには何も見つかりませんでしたが、回転角度を負にして反対方向に回転させることができると思います。
ビューを回転させたい場合は、最初の位置に戻します...次のようにします。
transform = CATransform3DMakeRotation(0, 0.0f, 1.0f, 0.0f)
または、さらに「組み合わせる」ことができます..
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DMakeRotation(-M_PI_2, 0.0f, 1.0f, 0.0f);
transform = CATransform3DMakeRotation(0, 0.0f, 1.0f, 0.0f);
transform.m34 = 0.0015;
view.layer.transform = transform;
あなたは試すことができます...CATransform3D transform = starLayer.transform;
の代わりに使用するCATransform3D transform = CATransform3DIdentity;