objective-c - 利用 - uitableviewcell 角丸




UITableViewセルインサートのカスタムアニメーションを作成できますか? (3)

Mattias Erikssonの答えのSwift 3.0

func animate() {
    for cell in tblView.visibleCells {
        cell.frame = CGRect(x:320, y:cell.frame.origin.y, width:cell.frame.size.width, height:cell.frame.size.height)
            UIView.animate(withDuration: 1.0) {
                cell.frame = CGRect(x:0, y:cell.frame.origin.y, width:cell.frame.size.width, height:cell.frame.size.height)
            }
    }
}

私は、NSFetchedResultsControllerによって設定されているUITableViewを持っています。

テーブルの最初の読み込みでは、セルをアニメーション化したいと思いますが、カスタムアニメーションを少しだけしたいです。

[tableView insertRowsAtIndexPaths:withRowAnimation:];

許可します。 具体的には、アニメーションを遅くして、特定の方法で側面から飛び込ませたいと思います。 私はUITableViewRowAnimation定数でこれを達成することができませんでした。 コアアニメーションを使用して、私が望むものを正確に行う方法はありますか?または、この特定のインスタンスでUIKitアニメーションに固執する必要がありますか?

助けてくれてありがとう!

ジョエル


materikのanswerがiOS 7.1 SDKで私のために働いていない、私は[self cellForRowAtIndexPath:indexPath];呼び出した後にnilを取得しました[self cellForRowAtIndexPath:indexPath];

私のコードはUITableViewサブクラスです:

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths
              withRowAnimation:(UITableViewRowAnimation)animation
{
    [super insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
    [self endUpdates]; // Populates UITableView with data
    [self beginUpdates];
    for (NSIndexPath *indexPath in indexPaths) {
        __block UITableViewCell *cell = [super cellForRowAtIndexPath:indexPath];
        if (cell) { // If indexPath isn't visible we'll get nil here
            // Custom animation
            CGRect frame = cell.frame;
            frame.origin.x = cell.frame.size.width;
            cell.frame = frame;
            frame.origin.x = 0;
            void (^animationsBlock)() = ^{
                cell.frame = frame;
            };
            if ([[UIView class] respondsToSelector:
                 @selector(animateWithDuration:delay:usingSpringWithDamping:
                           initialSpringVelocity:options:animations:completion:)]) {
                [UIView animateWithDuration:0.3
                                      delay:0
                     usingSpringWithDamping:0.5
                      initialSpringVelocity:0
                                    options:0
                                 animations:animationsBlock
                                 completion:NULL];
            } else {
                [UIView animateWithDuration:0.3
                                      delay:0
                                    options:UIViewAnimationOptionCurveEaseIn
                                 animations:animationsBlock
                                 completion:NULL];
            }
        }
    }
}

これを使って:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
         [cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
            [UIView animateWithDuration:2 animations:^{
                [cell setFrame:CGRectMake(100, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];

            }];

}




nsfetchedresultscontroller