1

これが私の最初の質問で、iOSプログラミングの初心者です。

私はウェブ全体を検索しましたが、stackoverflowから多くのヒントが得られました。Xcodeヘルプを検索し、ビデオなどを視聴しましたが、それでもこれを機能させることができないようです。

約6つの異なるUIViewを持つ1つのビューがあります。UIViewの1つは、垂直パネルの別のUIViewの上にある矢印画像です。矢印の画像がタッチされ、2つの方法がトリガーされます

1つの方法では、パネルと矢印を右に移動します。もう1つの方法は、移動に合わせて矢印を回転させます。

CATransform3DMakeRotation、、CGAffineTransformMakeRotationを試しCATransform3DMakeRotationましたが、矢印の移動とパネルの移動で矢印を回転させることができません。

私が達成できた最高のものは、を使用したものでしたCATransform3DMakeRotationが、これは矢印を反転させるだけで、回転をアニメートしません。

他のものは矢印を回転させますが、パネルの移動を許可しません。

これが矢印を回転させるための私のコードです。ご覧のように。私が試したたくさんのコメントアウトされたアイテム。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    CGRect bugRect = [[[RightArrow layer] presentationLayer] frame];
    if (CGRectContainsPoint(bugRect, touchLocation)) {
        [self RotateArrowOFF];
        [self MovePanels];
        NSLog(@"Arrow tapped!");
    } else {
        NSLog(@"Arrow not tapped.");
        return;
    }

}

-(IBAction)MoveLeftColorPanel
{
    NSLog(@"Right Arrow Center %@", NSStringFromCGPoint(RightArrow.center));

}
- (void)MovePanels
{


    if (_PanelsAreOffScreen == NO) { 

        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionLayoutSubviews animations:^{
            RightPanel.center = CGPointMake(1065, 384);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 1 complete");
                             _PanelsAreMoving = YES;

                         }];
        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            LeftPanel.center = CGPointMake(-50, 384);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 2 complete");
                             _PanelsAreMoving = YES;

                         }];

        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            RightArrow.center = CGPointMake(1010, 82);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 3 complete");
                             _PanelsAreMoving = YES;

                         }];

        _PanelsAreOffScreen = YES;
    }
    else { 
        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            RightPanel.center = CGPointMake(914, 384);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 5 complete");
                         }];
        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            LeftPanel.center = CGPointMake(108, 384);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 6 complete");
                         }];
        [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            RightArrow.center = CGPointMake(836, 82);
        }
                         completion:^(BOOL finished) {
                             NSLog(@"Animation 7 complete");
                         }];

        _PanelsAreOffScreen = NO;
    }

}

- (void)RotateArrowOFF//:(CGRect)rect
{

    RightArrow.layer.anchorPoint = CGPointMake(0.06, 0.5);

    if (_PanelsAreOffScreen == NO)
    {
        [CATransaction begin];
        [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
        [CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];
        CATransform3D RotateArrow = RightArrow.layer.transform;
        RotateArrow = CATransform3DMakeRotation(M_PI,0.0,0.0,1.0);
        RightArrow.layer.transform = RotateArrow;
    }
    else
    {
        [CATransaction begin];
        [CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];

        CATransform3D RotateArrow = RightArrow.layer.transform;
        RotateArrow = CATransform3DMakeRotation(0,0.0f,0.0f,1.0f);
        RightArrow.layer.transform = RotateArrow;

        [CATransaction commit];
    }
   }
4

1 に答える 1

0
    RightArrow.layer.transform = RotateArrow;

だからあなたの質問は、なぜここでアニメーションが起こっていないのですか?問題は、RightArrowがUIViewでRightArrow.layerあり、その「基礎となるレイヤー」も同様であるということです。ビューのプロパティに割り当てるだけでは、ビューの基になるレイヤーを暗黙的にアニメーション化することはできません。UIViewアニメーション(ビューのtransformプロパティを使用)を使用するか、Core Animationを直接使用する(CABasicAnimation)必要があります。

これが(私の本からの)例です:

[CATransaction setDisableActions:YES];
v.layer.transform = CATransform3DRotate(v.layer.transform, M_PI/4.0, 0, 0, 1);
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform"];
anim.duration = 0.8;
[v.layer addAnimation:anim forKey:nil];
于 2013-03-27T03:26:15.597 に答える