1

正しい観察で編集します。

次の 2 つのスニペットを使用して、UIImageView を回転させました。ステージ 1 の後、目的の 3D 効果が得られました。ビューが回転し (3D 効果)、引き伸ばされます (サイズが大きくなります)。stage2 では右側のヒンジで rightView をスイングさせようとしています。

アンカー ポイントを変更する線を適用すると、ビューが正しくスイングし (右側にヒンジ)、大きな問題が 1 つあります。(回転) 3D 効果はそのままで、ビューのサイズが元のサイズ (より小さい) に戻ります。スイングが発生します。

助言がありますか?

rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); 


-(void)stage1
{
    [UIView animateWithDuration:1.5  animations:^{
        rightView.transform = CGAffineTransformMakeTranslation(0,0);   //rightView i UIImageView
        CATransform3D _3Dt = CATransform3DIdentity;
        _3Dt =CATransform3DMakeRotation(3.141f/42.0f,0.0f,-1.0f,0.0f);  
        _3Dt.m34 = -0.001f;
        _3Dt.m14 = -0.0015f;
        rightView.layer.transform = _3Dt;
    } completion:^(BOOL finished){
        if (finished) {
            NSLog(@"finished..");
        }
    }];
}

-(void)Stage2
{
    rightView.layer.anchorPoint = CGPointMake(1.0, 0.5);   //issue?
    rightView.center = CGPointMake(1012, 384);
    [UIView animateWithDuration:1.75 animations:^{
        CATransform3D rightTransform = rightView.layer.transform;
        rightTransform.m34 = 1.0f/500; 
        rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0);
        rightView.layer.transform = rightTransform;
    } completion:^(BOOL finished) {
    }];
}
4

1 に答える 1

1

「オプション」を期間付きのアニメーションに追加し、追加する必要がありますoptions:UIViewAnimationOptionBeginFromCurrentState

それ以外の場合は、最初からやり直します。

したがって、ステージ 2 は次のようになります。

-(void)Stage2
{
    rightView.layer.anchorPoint = CGPointMake(1.0, 0.5);   //issue?
    rightView.center = CGPointMake(1012, 384);
    [UIView animateWithDuration:1.75
                          delay:0.00 
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
        CATransform3D rightTransform = rightView.layer.transform;
        rightTransform.m34 = 1.0f/500; 
        rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0);
        rightView.layer.transform = rightTransform;
    } completion:^(BOOL finished) {
    }];
}
于 2013-06-04T03:24:26.557 に答える