0

アプリケーションに問題があります。多くのアイコン(UIView)があり、それぞれがアニメーションを実行している画面を表示しているときに、エラーが発生します。この画面は踏み台の画面を連想させ、アニメーションのビジュアルも同様です。

そのため、ホームボタンを押すと、アプリケーションがバックグラウンドに移行せず、何もできなくなります。電源ボタンも機能しません。そして、アイコンは揺れ続けます。

ラベル作成メソッドの呼び出しを削除しても、これは発生しません。

何かアドバイス?

ありがとう!

アニメーションメソッド(Three20 apiから抽出):

- (void)wobble {
    static BOOL wobblesLeft = NO;

    if (isEditing)
    {
        CGFloat rotation = (kWobbleRadians * M_PI) / 180.0;
        CGAffineTransform wobbleLeft = CGAffineTransformMakeRotation(rotation);
        CGAffineTransform wobbleRight = CGAffineTransformMakeRotation(-rotation);

        [UIView beginAnimations:nil context:nil];

        NSInteger i = 0;
        NSInteger nWobblyButtons = 0;



        for(Icon *ic in iconList)
        {
            ++nWobblyButtons;
            i++;
            if (i % 2)
            {
                ic.transform = wobblesLeft ? wobbleRight : wobbleLeft;

            } else {
                ic.transform = wobblesLeft ? wobbleLeft : wobbleRight;
            }
        }


        if (nWobblyButtons >= 1)
        {
            [UIView setAnimationDuration:kWobbleTime];
            [UIView setAnimationDelegate:self];
            [UIView setAnimationDidStopSelector:@selector(wobble)];
            wobblesLeft = !wobblesLeft;

        } else {
            [NSObject cancelPreviousPerformRequestsWithTarget:self];
            [self performSelector:@selector(wobble) withObject:nil afterDelay:kWobbleTime];
        }

        [UIView commitAnimations];
    }
}

ラベルの作成

-(void)layoutLabel
{
    // If title isn`t builded.
    if(_lblName == nil)
    {
        // Create new label.
        _lblName = [[UILabel alloc] initWithFrame:CGRectMake(LABEL_POS_X,
                                                             LABEL_POS_Y,
                                                             LABEL_WIDTH,
                                                             LABEL_HEIGHT)];

        // Clear the background.
        [_lblName setBackgroundColor:[UIColor clearColor]];

        // Sets the font.
        [_lblName setFont:[UIFont fontWithName:@"Helvetica-Bold" size:11.3]];
        [_lblName setAdjustsFontSizeToFitWidth:NO];

        // Sets text color
        [_lblName setTextColor:[UIColor whiteColor]];

        // Adjust the number of lines.
        [_lblName setNumberOfLines:2];

        // Adjust the aligment to center.
        [_lblName setTextAlignment:UITextAlignmentCenter];

        // Adjust shadow like the springboad`s icons.
        _lblName.layer.shadowOpacity = 1.0;
        _lblName.layer.shadowRadius = 0.8;
        _lblName.layer.shadowColor = [[UIColor blackColor] CGColor];
        _lblName.layer.shadowOffset = CGSizeMake(0, 1.2);

        // Add label to container.
        [self addSubview:_lblName];
    }
}
4

2 に答える 2

2

問題は:

アイコンごとに多くのサブビューがあるため、アニメーション時に各アイコンを計算すると、コードが遅くなります。

それで、私はこれを解決するためにいくつかの光を見つけました。同じアイコン構造を作成しましたが、その後、UIImage内のeverithingを以下のコードとマージしました。

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

これにより、FPSが約15から60Ooに増加しました

私が見つけたいくつかの助けに従ってください リンク

于 2012-05-21T19:28:08.967 に答える
0

シャドウはまったくアニメーション化されません。アニメーション中にそれらを無効にし、アニメーションが完了したら再びオンにします。

シャドウでアニメートするときにフリーズしたことはありませんが、パフォーマンスが許容できないほどぎくしゃくしています。私の経験では、影のあるものをアニメートしようとすると、許容できない結果が生じます。

于 2012-05-19T17:36:02.310 に答える