0

これは微妙な問題です。スライダーとセグメント化されたコントロールを備えたカスタム テーブルビュー セルがあります。テーブルが編集モードになると、すべてが正常に表示され、赤い削除ボタンが表示されると、スライダーとセグメント化されたコントロールの両方が幅を縮小して、右側に削除ボタン用のスペースが残り、この縮小が正しくアニメーション化されます。だからすべてが良いです。

ただし、ユーザーが削除を行わずに範囲外をタップすると、削除ボタンのアニメーション スワイプが終了する前に、スライダーがすぐに全幅に戻ります。ただし、セグメント化されたコントロールは、正しくアニメーション化されて全幅に戻ります。私自身はアニメーションを扱っていません。スライダーがアニメーションしないのはなぜですか? 私のセットアップコードは以下です。何か案は?

左側の円形の赤い選択ボタンが表示または非表示になったときのすべての要素のアニメーションは問題ないことに注意してください。

これを修正できない場合は、削除ボタンが表示されたときにコンテンツを左に押しないようにする方法を知りたいのですが、選択ボタンのインデント アニメーションは保持します。

NSArray *itemArray = @[@"1", @"2", @"3", @"4"];
self.source = [[[UISegmentedControl alloc] initWithItems:itemArray] autorelease];
self.source.frame = CGRectMake(80, 10, cb.size.width - 92, 36);
self.source.segmentedControlStyle = UISegmentedControlStylePlain;
self.source.selectedSegmentIndex = 0;
self.source.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.contentView addSubview:self.source];

self.phaseSlider = [[[UISlider alloc] initWithFrame:CGRectMake(80, 50, cb.size.width - 92, 36)] autorelease];
self.phaseSlider.continuous = TRUE;
self.phaseSlider.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.contentView addSubview:self.phaseSlider];
4

1 に答える 1

0

これに対する解決策を発見しました。サイズ変更マスクを使用して、削除ボタンが表示されたときにスライダーのサイズを変更できるようにすることには、明らかに問題があります。代わりに、柔軟な幅のサイズ変更マスクを削除しました。でコントロールを初期化しますinitWithStyleが、フレームのみを に設定しlayoutSubViewsます。セルの幅と高さは initWithStyle では正確にわからないため、実際にはこれがコントロール フレームを設定するためのより良い方法です。フレームを設定するlayoutSubViewsと、削除ボタンの間に呼び出され、アニメーションが表示および非表示になり、位置とサイズが正しくアニメーション化されます。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        // Initialization code
        NSArray *itemArray = @[@"1", @"2", @"3", @"4"];
        self.source = [[[UISegmentedControl alloc] initWithItems:itemArray] autorelease];
        self.source.segmentedControlStyle = UISegmentedControlStylePlain;
        self.source.selectedSegmentIndex = 0;
        [self.contentView addSubview:self.source];

        self.phaseSlider = [[[UISlider alloc] initWithFrame:CGRectZero] autorelease];
        self.phaseSlider.continuous = TRUE;
        [self.contentView addSubview:self.phaseSlider];

        self.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    return self;
}

- (void)layoutSubviews
{    
    [super layoutSubviews];

    float w = self.contentView.bounds.size.width;

    self.source.frame = CGRectMake(78, 10, w - 92, 36);
    self.phaseSlider.frame = CGRectMake(78, 50, w - 92, 36);
}
于 2013-03-12T11:55:51.953 に答える