1

2つのUIButtonがあり、最初にNumber1をクリックしてから、Number2をクリックしたいと思いUIButtonますUIButton。2番目をクリックした後、2つを自動的に回転さUIButtonせたいです。UIButton私はCABasicAnimationそれらを回転させるために使用します。2つUIButtonのは同じbuttonClickedアクションを持ちます。2つのボタンは異なるCABasicAnimation方法を使用します。

回転させるために新しいメソッドを作成しましたが、アクションから呼び出すとbutton clicked(2つのボタンで同じ)、最初のメソッドのみが回転します。私が使用するrotateメソッドを呼び出すために[self rotateButtons];

問題は、新しいボタンを挿入して新しいボタンにUIButtonを付ければ問題ないということです。IBActionしかし、レイヤーに新しいボタンは必要ありません。

rotateButtons両方のボタンを同時に回転できるように修正するにはどうすればよいですか?

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

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    if ([value isEqualToString:@"SecondImage"])
    {
        UIImageView *myView2=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton+100];
        [myView2 setHidden:FALSE];
        UIImageView *myView=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton];
        [myView setHidden:TRUE];
        CALayer *layer2 =  myView2.layer;
        layer2.anchorPoint = CGPointMake(0.5f, 0.5f);
        CABasicAnimation *animateImage2 = [CABasicAnimation animationWithKeyPath: @"transform"];
        CATransform3D transform2 = CATransform3DIdentity;
        transform2.m34 = 1.0/-900.0; 
        self.view.layer.transform = transform2;
        layer2.transform = CATransform3DMakeRotation(-M_PI/2, 0.0f, 1.0f, 0.0f);
        self.view.layer.transform = transform2;
        transform2 = CATransform3DRotate(transform2,  -M_PI, 0.0f, 1.0f, 0.0f);
        animateImage2.repeatCount = 1.0;
        animateImage2.toValue = [NSValue valueWithCATransform3D: transform2];
        animateImage2.duration = 0.5;
        animateImage2.fillMode = kCAFillModeForwards;
        animateImage2.removedOnCompletion = NO;
        [layer2 addAnimation: animateImage2 forKey: @"halfAnimatedImage"];

        return;
    }
}

-(void) rotateView1
{
    UIImageView *firstImage=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton];
    CALayer *layer =  firstImage.layer;
    layer.anchorPoint = CGPointMake(0.5f, 0.5f);
    CABasicAnimation *animateImage = [CABasicAnimation animationWithKeyPath: @"transform"];
    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = 1.0/-900.0; 
    self.view.layer.transform = transform;
    layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
    [animateImage setDelegate:self ];
    animateImage.repeatCount = 0.5;
    animateImage.toValue = [NSValue valueWithCATransform3D: transform];
    animateImage.duration = 0.5;
    animateImage.fillMode = kCAFillModeForwards;
    animateImage.removedOnCompletion = NO;
    animateImage.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    [animateImage setValue:@"SecondImage" forKey:@"halfAnimatedImage"];
    [layer addAnimation: animateImage forKey: @"halfAnimatedImage"];
}
-(void) rotateView2
{
    UIImageView *firstImage=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton];
    CALayer *layer =  firstImage.layer;
    layer.anchorPoint = CGPointMake(0.5f, 0.5f);
    CABasicAnimation *animateImage = [CABasicAnimation animationWithKeyPath: @"transform"];
    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = 1.0/-900.0; 
    self.view.layer.transform = transform;
    layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
    [animateImage setDelegate:self ];
    animateImage.repeatCount = 0.5;
    animateImage.toValue = [NSValue valueWithCATransform3D: transform];
    animateImage.duration = 0.5;
    animateImage.fillMode = kCAFillModeForwards;
    animateImage.removedOnCompletion = NO;
    animateImage.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    [animateImage setValue:@"SecondImage" forKey:@"halfAnimatedImage"];
    [layer addAnimation: animateImage forKey: @"halfAnimatedImage"];
}
-(IBAction) buttonRefresh:(UIButton *)sender
{
    numberOfCurrentButton=1; 
    [self rotateView1];
    numberOfCurrentButton=2;
    [self rotateView2];
}
-(IBAction)buttonClicked:(UIButton *)sender
{
    [self buttonRefresh:sender];

}

`

4

1 に答える 1

1

私の理解によると、buttonClickedアクションは送信者(クリックされたUIButton)を受け取り、同じように回転します。

両方を回転させるには、次のいずれかを実行できます。

  1. 両方のボタンのIBOutlet(IBActionではない)を作成します。rotateButtonsメソッドでは、送信側UIButtonを回転させるだけでなく、これらの両方のボタンを回転させます。
  2. 上記の@lnafzigerで提案されているように、XIBの両方のボタンに番号を付けます。rotateButtonsメソッドで、この両方のボタンを回転させます。次のコードを使用して、各UIButtonを取得できます。

    UIbutton *button1 = (UIButton *)[self.view viewWithTag:101];
    
于 2012-05-27T03:55:57.627 に答える