4

私のアプリは、ユーザーの選択に基づいて計算とアニメーションを実行する必要がありUILabel、アニメーションで使用する前に更新する必要があります。問題は、テキストを設定するたびにUILabelアニメーションが台無しになり、理由がわかりません。[self.view.layer removeAllAnimations]; を試しました。テキストを変更する前UILabelでもまだダメです。そのブロックからプログラムで呼び出してテキストIBActionを変更しようUILabelとしましたが、それでもアニメーションが台無しになります。UILabelviewDidLoad でテキストを変更しても問題なく動作するため、何も機能していないようです。UILabelアニメーションの前に別のテキストを変更してストーリーボードの問題であるかどうかも確認しましたが、同じ問題が発生します。それがまったく役立つ場合、アニメーションコードは次のとおりです。

    -(IBAction) swipeDown:(UISwipeGestureRecognizer *)recognizer{
multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
subtract.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
add.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
divide.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
signcircle.frame = CGRectMake(145.0f, 70.0f, signcircle.frame.size.width,signcircle.frame.size.height);
sign.frame = CGRectMake(152.0f, 68.0f, sign.frame.size.width,sign.frame.size.height);
type=@"multiply"; 
if(fivebutton.highlighted){
    circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
    multiply.transform = CGAffineTransformMakeScale(1.35f, 1.35f);
    multiply.frame = CGRectMake(120.0f, 248.0f, multiply.frame.size.width, multiply.frame.size.height);
    [UIView animateWithDuration:.25f animations:^{
        add.frame = CGRectMake(130.0f, 202.0f, add.frame.size.width, add.frame.size.height);
        add.alpha=1.0;
        subtract.frame = CGRectMake(82.0f, 255.0f, subtract.frame.size.width, subtract.frame.size.height);
        subtract.alpha=1.0;
        divide.frame = CGRectMake(178.0f, 255.0f, divide.frame.size.width, divide.frame.size.height);
        divide.alpha=1.0;
        multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
        multiply.frame = CGRectMake(130.0f, 305.0f, multiply.frame.size.width, divide.frame.size.height);
        multiply.alpha=1.0;
        circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
        circle.alpha=1.0;
    UIImage *downimage = [UIImage imageNamed: @"multiplydown.png"];
    [multiply setImage:downimage];
    onebutton.alpha=0.1;
    one.alpha=0.1;
    twobutton.alpha=0.1;
    two.alpha=0.1;
    threebutton.alpha=0.1;
    three.alpha=0.1;
    fourbutton.alpha=0.1;
    four.alpha=0.1;
    sixbutton.alpha=0.1;
    six.alpha=0.1;
    fivebutton.alpha=0.0;
    sevenbutton.alpha=0.1;
    seven.alpha=0.1;
    eightbutton.alpha=0.1;
    eight.alpha=0.1;
    ninebutton.alpha=0.1;
    nine.alpha=0.1;
    zerobutton.alpha=0.1;
    zero.alpha=0.1;
    decimalbutton.alpha=0.1;
    decimal.alpha=0.1;
    equalsbutton.alpha=0.1;
    equals.alpha=0.1;
    }];
    [UIView commitAnimations];
}

この場合、UILabelテキストの変更により、「加算」、「減算」、「除算」、および「乗算」( UIImageView's) が、アニメーションが想定されているように広がるのではなく、一緒にマージされます。

    -(void) fiveTapEnded{
var2.hidden=NO;
if ([type isEqual:@"add"]) {
    NSLog(@"Is add");
}
if ([type isEqual:@"subtract"]) {
    NSLog(@"Is subtract");
}
if ([type isEqual:@"multiply"]) {
    var1.textAlignment = NSTextAlignmentRight;
    var1.frame = CGRectMake(40.0f, 70.0f, var1.frame.size.width,var1.frame.size.height);
    var2.frame = CGRectMake(145.0f, 70.0f, var2.frame.size.width,var2.frame.size.height);
    [UIView animateWithDuration:.25f animations:^{
        add.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
        add.alpha=0.0;
        multiply.transform = CGAffineTransformMakeScale(1.5f, 1.5f);
        multiply.alpha=0.0;
        divide.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
        divide.alpha=0.0;
        circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
        circle.alpha=0.0;
        subtract.alpha=0.0;
        var1.frame = CGRectMake(0.0f, 20.0f, var1.frame.size.width,var1.frame.size.height);
        var2.frame = CGRectMake(185.0f, 20.0f, var2.frame.size.width,var2.frame.size.height);
        signcircle.frame = CGRectMake(145.0f, 30.0f, signcircle.frame.size.width,signcircle.frame.size.height);
        sign.frame = CGRectMake(152.0f, 26.5f, sign.frame.size.width,sign.frame.size.height);
        result.frame = CGRectMake(8.0f, 100.0f, result.frame.size.width,result.frame.size.height);
        signcircle.alpha=1.0;
        sign.alpha=1.0;
        var2.alpha=1.0;
        result.alpha=1.0;
        one.alpha=1.0;
        onebutton.alpha=1.0;
        twobutton.alpha=1.0;
        two.alpha=1.0;
        three.alpha=1.0;
        threebutton.alpha=1.0;
        fourbutton.alpha=1.0;
        four.alpha=1.0;
        sixbutton.alpha=1.0;
        six.alpha=1.0;
        five.alpha=1.0;
            fivebutton.alpha=1.0;;
        sevenbutton.alpha=1.0;
        seven.alpha=1.0;
        eightbutton.alpha=1.0;
        eight.alpha=1.0;
        ninebutton.alpha=1.0;
        nine.alpha=1.0;
        zerobutton.alpha=1.0;
        zero.alpha=1.0;
        decimalbutton.alpha=1.0;
        decimal.alpha=1.0;
        equalsbutton.alpha=1.0;
        equals.alpha=1.0;
        }];
    [self.view.layer removeAllAnimations];
    [self functionToBeCalled:self];
}
if ([type isEqual:@"divide"]) {
    NSLog(@"Is divide");
}
}

この場合、「var1」と「var2」( UILabel's) は上に移動しません。

私はその混乱を理解しています。私はどこでも検索しており、同様の問題を見つけることができないので、誰かが解決策やヒントを持っていれば、これは私の最後の手段でした.

4

1 に答える 1

1

「アニメーションを台無しにする」とは、開始位置に戻ることを意味する場合、おそらく自動レイアウトがオンになっています。を変更すると、オートレイアウトの制約が自動的に再適用UILabelされるため、フレームの変更を伴うアニメーションはすべて阻止されます。要するに、レイアウトを決定する制約のある autolayout を使用する場合、frameまたはcenter値を手動で変更するべきではありません。

それは明らかに2つの可能な救済策を残します:

  1. 最も簡単なのは、自動レイアウトをオフにすることです。次に、ラベルの設定は、適用される制約をトリガーしません。非常によく似た問題については、 NSTimer が他のアニメーションをブロックするを参照してください。

  2. 自動レイアウトをオンのままにしたい場合は、コントロールのframe(または) プロパティを変更してアニメーション化するのではなく、適切な制約の参照を作成してから、プロパティを変更してアニメーション化する必要があります。上にスライドするように画像ビューをアニメーション化するを参照してください。centerIBOutletconstant

于 2013-05-11T02:35:27.003 に答える