大红鹰葡京会荼菜的iOS笔记–UITableViewCell的各种操作(刷新、插入、删除、动画)荼菜的iOS笔记–一摆设图告诉你程序员需要了解之这些网站。

序言:最近于召开一个闲话的对话机器人应用,主界面就是一个tableView,所以难免用到了对cell的各种操作。下边代码全部也自工程中拷贝出来的,以统自己下次用,由于是店之工,故未可知贴补出Demo,但如果发生有疑难还可咨询我,必定起咨询必答。

南瓜.jpg

相同、刷新数据源

//刷新整个Section
- (void)reloadDataBySection
{
     NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:0];
     [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationTop];
}

//通过刷新某个Section的每一个Row来刷新Section 
- (void)reloadDataBySection
{
     NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:0];
     [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationTop];
}

//刷新单行
- (void)reloadSingleRow
{
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

前言:今天万圣节,今天便一样摆图,不说话便如此深。

第二、插入数据源

在调用insertRowsAtIndexPaths和deleteRowsAtIndexPaths的时自然要是先期改数据源,在调用上述函数,不然会有crash。

@property (nonatomic,strong) NSMutableArray *indexPathsArray;
_indexPathsArray = [NSMutableArray array];

#pragma mark -- 聊天界面数据刷新

//删除最后一行waiting气泡
-(void)deleteData{
[_datas removeLastObject];
[_indexPathsArray addObject:[NSIndexPath indexPathForItem:_datas.count inSection:0]];
[self.tableView deleteRowsAtIndexPaths:_indexPathsArray withRowAnimation:UITableViewRowAnimationFade];
[_indexPathsArray removeAllObjects];
}

//新增一条消息气泡
-(void)insertData{
[ws.datas addObject:model];
[_indexPathsArray addObject:[NSIndexPath indexPathForItem:_datas.count-1 inSection:0]];
[self.tableView insertRowsAtIndexPaths:_indexPathsArray withRowAnimation:UITableViewRowAnimationLeft];
[_indexPathsArray removeAllObjects];
}

//插入一个Section
-(void)insertData{
NSInteger datasCount = _datas.count>1?_datas.count-1:0;
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:datasCount] withRowAnimation:UITableViewRowAnimationTop];
}

亟待明白的

三、获取cell所在frame

//应用场景:点击Cell后要执行动画,动画需要从当前cell的frame开始变化的场景
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
CGRect cellFrameInTableView = [tableView rectForRowAtIndexPath:indexPath];
CGRect cellFrameInSuperview = [tableView convertRect:cellFrameInTableView toView:[tableView superview]];
DetailViewController* detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSMutableDictionary* dict = [self.arrayForPlaces objectAtIndex:indexPath.row];
detailViewController.dictForData = dict;
detailViewController.yOrigin = cellFrameInSuperview.origin.y;
[self.navigationController pushViewController:detailViewController animated:NO];
[detailViewController release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

//同理,下边为获取**collectionViewCell**相对屏幕和相对collectionView的frame
 CGRect cellFrame = [[collectionView cellForItemAtIndexPath:indexPath] frame];
 CGRect cellFrameInSuperView = [collectionView convertRect:cellFrame toView:collectionView];
 CGRect cellFrameInScreen = [collectionView convertRect:cellFrame toView:self];
 NSLog(@"frameInSuperView --%f ",cellFrameInSuperView.origin.x);
 NSLog(@"cellReal --%f ",cellFrameInScreen.origin.x);

季、cell的一部分动画

  • cell进入时动画,依次往上围

-(void)startTableViewAnimation{

      [self.tableView reloadData];
      NSArray *visibleCells=self.tableView.visibleCells;
      CGFloat tableHeight=self.tableView.bounds.size.height;

      for (UITableViewCell *cell in visibleCells) {
          cell.transform = CGAffineTransformMakeTranslation(0, tableHeight);
      }

     NSInteger index=0;
     for (UITableViewCell *cell in visibleCells) {
        cell.transform = CGAffineTransformMakeTranslation(0, tableHeight);
        [UIView animateWithDuration:1.0 delay:0.01*index usingSpringWithDamping:0.8 initialSpringVelocity:0     options:UIViewAnimationOptionTransitionNone animations:^{
       cell.transform = CGAffineTransformMakeTranslation(0, 0);
       } completion:nil];
          index += 1;
       }
}
  • cell进入时动画,cell放大

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
//设置Cell的动画效果为3D效果
//设置x和y的初始值为0.1;
cell.layer.transform = CATransform3DMakeScale(0.1, 0.1, 1);
//x和y的最终值为1
   [UIView animateWithDuration:1 animations:^{
      cell.layer.transform = CATransform3DMakeScale(1, 1, 1);
   }];
}
  • cell出现时,由斜变正

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
// 从锚点位置出发,逆时针绕 Y 和 Z 坐标轴旋转90度
CATransform3D transform3D = CATransform3DMakeRotation(M_PI_2, 0.0, 1.0, 1.0);
// 定义 cell 的初始状态
cell.alpha = 0.0;
cell.layer.transform = transform3D;
cell.layer.anchorPoint = CGPointMake(0.0, 0.5); // 设置锚点位置;默认为中心点(0.5, 0.5)
// 定义 cell 的最终状态,执行动画效果
  [UIView animateWithDuration:0.5 animations:^{
   cell.alpha = 1.0;
   cell.layer.transform = CATransform3DIdentity;
   CGRect rect = cell.frame;
   rect.origin.x = 0.0;
   cell.frame = rect;
  }];
}
  • cell删除动画

[_tableViews deleteRowsAtIndexPaths:@[cell.indexPath] withRowAnimation:UITableViewRowAnimationLeft];

  [UIView animateWithDuration:0.3  animations:^{
     cell.contentView.center = CGPoint(-width / 2, height / 2);
  } completion:^(BOOL finished) {
    [self.tableView deleteRowsAtIndexPaths:xxx  withRowAnimation:UITableViewRowAnimationTop];
  }];
  • cell依次插入动画

@property(nonatomic,strong)NSMutableArray *indesPaths;
@property (nonatomic,assign)int DatNum;
@property(nonatomic,strong) NSTimer * timer;

- (void)viewDidLoad {

[super viewDidLoad];
[self configInit];
[self loadData];
[self startTableViewAnimation];
self.DatNum = -1;
NSMutableArray *indexPaths = @[].mutableCopy;
self.indesPaths = indexPaths;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(charusell) userInfo:nil repeats:YES];

}

-(void)charusell{

    self.DatNum = self.DatNum +1;
   if (self.DatNum < self.allDatas.count) {
    [self.indesPaths addObject:[NSIndexPath indexPathForItem:self.DatNum inSection:0]];
    [self.tableView insertRowsAtIndexPaths:self.indesPaths withRowAnimation:UITableViewRowAnimationTop];
    [self.indesPaths removeAllObjects];
}else{
   [self.timer invalidate];
  //记得当不用这个定时器的时候要销毁.
   self.timer = nil;
 }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// return _allDatas.count;
  return self.DatNum+1;
}

晚言语:附上之前写的篇章,欢迎指正:
荼菜的iOS笔记–Core Animation 核心动画
荼菜的iOS笔记–UIView的几个Block动画
荼菜的iOS笔记–一些实用功能。
荼菜的iOS笔记–一布置图记住有git命令行操作。
荼菜的iOS笔记–一摆图告诉您程序员需要理解之这些网站。
荼菜的iOS笔记–图片裁剪黑魔法。
荼菜的iOS笔记–iOS自动包脚本(Python)
荼菜的iOS笔记–我的编码规范参考。
荼菜的iOS笔记–iOS基础良好博客总结ToDoList
荼菜的iOS笔记–Xcode Tips
当然,我还写了诗。。。
光。

后言语:附上之前写的稿子,欢迎指正:
荼菜的iOS笔记–Core Animation 核心动画
荼菜的iOS笔记–UIView的几个Block动画
荼菜的iOS笔记–一些实用功能。
荼菜的iOS笔记–UITableViewCell的各种操作(刷新、插入、删除、动画)
荼菜的iOS笔记–一摆放图记住有git命令行操作。
荼菜的iOS笔记–图片裁剪黑魔法。
荼菜的iOS笔记–iOS自动包脚本(Python)
荼菜的iOS笔记–我的编码规范参考。
荼菜的iOS笔记–iOS基础好博客总结ToDoList
荼菜的iOS笔记–Xcode Tips
自,我还写了诗。。。
光。

相关文章

admin

网站地图xml地图