1

具体的には、アプリにtableviewcontrollerがあり、スクロール時に少しぎくしゃくしています。

カスタムの UISegmentedControl の外観が原因であると確信しています。テーブルには 4 つあり、それぞれが独自のセルにあります。

アプリのデリゲートで次のコードを使用して、それらをカスタマイズします。

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControlSelected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                             [UIColor whiteColor], UITextAttributeTextColor,
                                                             [UIColor grayColor], UITextAttributeTextShadowColor,
                                                             [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset,
                                                             [UIFont fontWithName:@"Georgia-Italic" size:0.0], UITextAttributeFont,
                                                             nil] forState:UIControlStateNormal];

なぜこれがこのような速度低下を引き起こすのでしょうか? パフォーマンスを向上させるにはどうすればよいですか? それらが画面に表示されると、震えます。私はこれまでこのような問題を抱えたことはありません。

スイッチとセグメント化されたコントロールは、それらを削除すると速度が上がり、すべて絹のように滑らかになるので、かなり確信しています。私は基本的にこれを行います:

if (indexPath.row == 0)
        {
            cell.textLabel.text = @"text";
            UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"1", @"2", nil]];
            [segControl setSelectedSegmentIndex:[myBool boolValue]];
            [segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
            [segControl addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventValueChanged];
            cell.accessoryView = segControl;
        }

私のcellForRowAtIndexPath7回で、どうすればこれを速くすることができますか?

4

1 に答える 1

0

私が取り組んでいるアプリがあり、同様のカスタマイズがいくつかありました。セット コントロールを再利用することをお勧めします... UITableViewCell サブクラスを作成し、その中に seg コントロールを設定することでこれを実現できます。その後、カスタマイズする必要があるもののためのアウトレットを作成できます。

クイック検索でこのチュートリアルが見つかり、私が話しているように見えます

UITableViewCell プロトタイプ チュートリアル

このようにして、セルは完全に再利用可能になるため、はるかに高速になります。

しかし、私はあなたの正確なユースケースを今は知らないので、これはあなたには当てはまらないかもしれません. カスタム ボタン、アート、およびアニメーションを使用してセルの速度を大幅に向上させました。

alloc init は非常に遅いことを覚えておいてください。

別のオプションは、コントロールでできることをすべて事前に初期化し、それらを配列に格納してから、cellForRowAtIndexPathにのみロードすることだと思います。

于 2012-07-26T00:47:18.033 に答える