1

ここに奇妙な事実があります:

アニメーションがあるカスタム UITableViewCell があります (画像が動きます)。

セルの作成では問題なく動作します。

しかし、スクロールしてセルを非表示にしてから戻ると、アニメーションが停止しました。それ、わかります。しかし、viewWillAppear でもアニメーション メソッドを呼び出しています。そして、配線された部分は、メソッドが呼び出されることです。ブレークポイントを配置しました。割り当て解除されたものは何もありません...

私の UITableViewCell は強力に保持されています (音楽プレーヤーがあり、音楽は引き続き再生されます)。私は本当にそれを取得しません。

これが私のコードです:

@property (nonatomic, strong) DWPlayerCellVC *playerView;


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"player"];

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"player"];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }

        NSArray *viewsToRemove = [cell.contentView subviews];
        for (UIView *v in viewsToRemove) {
            [v removeFromSuperview];
        }

        if(!self.playerView){
            self.playerView = [[DWPlayerCellVC alloc] init];
        }

        [cell.contentView addSubview:self.playerView.view];

        self.playerView.model = self.model[indexPath.row];


        return cell;

DWPlayerCellVC :

@implementation DWPlayerCellVC

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self zoomIn];
}

- (void)setModel:(id)model
{
    _model = model;
     // ...
    [self zoomIn];

}

- (void)zoomIn
{
    UIViewAnimationOptions options =
    UIViewAnimationOptionBeginFromCurrentState |
    UIViewAnimationOptionCurveEaseInOut |
    UIViewAnimationOptionRepeat |
    UIViewAnimationOptionAutoreverse;

    [UIView
     animateWithDuration:10.f
     delay:0.f
     options:options
     animations:^{
         CGFloat scale = 1.4f;
         self.imageCoverView.transform = CGAffineTransformMakeScale(scale, scale);
     } completion:NULL];
}

何かアイデアがあれば...

どうもありがとう !

4

2 に答える 2

1

zoomInによってのみ呼び出されるため、問題があるようsetModelです。これは、UITabelViewCells管理された表示が想定されていないUIViewControllersためviewWillAppear:、呼び出されることはありません。

私が考えることができる2つのオプションがあります。

1 つ目は、ルート ビュー コントローラーをコンテインメント ビュー コントローラーDWPlayerCellVCとして設定し、childViewController. このオプションには、すべてを実行するための作業が必要です。カスタム コンテナー ビュー コントローラーの作成を読んで、動作させるために必要な要素を確認することをお勧めします。

2 つ目 (および私が使用するもの) はUITableViewCell、アニメーションの実行を処理するサブクラスを作成することです。prepareForReuseその後、アニメーションを再開するメソッドを実装するだけです。を使用すると、そのメソッドがセルで自動的に呼び出されますdequeueReusableCellWithIdentifier:

于 2013-08-23T14:50:11.263 に答える