我正在实施TableViewController
。除了UITableViewCellStyle
和NavigationControllerTitle
的较小问题(我想我可以自己解决它们),我一直在试着如何实现一些动画。请注意,我已经搜索了很多主题(这也是Can you do custom animations for UITableView Cell Inserts?)并尽可能多地搜索,我不知道如何调用我必须做的事情。所以我把它弄清楚了。
左边有几个小的随机彩色矩形单元格。当我单击单元格时,此矩形会在全宽度上展开,而不会覆盖CellText。
第二个动画同时发生,它会插入一些带有图像的阵列,向下扩展并向下滑动。
我真的试着写这个,但我能做的就是将整个视图向右滑动,无处可去。
这是我的.m档案,我想我应该继续努力。如果我要粘贴你的任何其他部分,请告诉我。
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
int selectedRow = indexPath.row;
NSLog(@"touch on row %d", selectedRow);
[self animate];
}
- (void)animate
{
[[self.tableView visibleCells] enumerateObjectsUsingBlock:^(UITableViewCell *cell, NSUInteger idx, BOOL *stop) {
[cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView animateWithDuration:0.2 animations:^{
[cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
}];
}];
}
感谢您的耐心等待,请理解我真的很想了解如何做到这一点。
答案 0 :(得分:1)
我真的试着写这个,但我能做的就是滑动 整个视图向右,无处可去。
是的,看起来这就是你在这里发布的代码所做的。您将获取所有可见单元格(不仅仅是已选中的单元格)并将它们全屏移动到右侧(屏幕外)。
我想你要做的就是告诉单元格将该矩形颜色向右扩展。所以在-tableView:didSelectRowAtIndexPath:
中向单元格发送一条消息来修改自己:
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MyTableViewCell *cell = (MyTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
[cell setExpanded:YES animated:YES];
}
现在,单元格负责将背景颜色设置为其全宽度。 -setExpanded:YES animated:
只是我编写的方法名称。您可以在应用程序中调用任何有意义的内容。它可能看起来像这样(用Safari编写,所以不要指望完美):
- (void)setExpanded:(BOOL)expanded animated:(BOOL)animated
{
_expanded = expanded; // Assumes you have a property for this.
CGRect frame = self.colorView.frame;
if (expanded) {
frame.size.width = self.contentRect.bounds.size.width;
}
else {
frame.size.width = 40.0f;
}
[UIView animateWithDuration:0.2 animations:^{
self.colorView.frame = frame;
}];
}
向下滑动其他内容有点困难。此内容是单元格的一部分,新单元格还是在表格视图中添加的视图?我可能会将其添加为新单元格,因此您可以使用表格视图的常规插入动画将其设置为动画。
答案 1 :(得分:0)
我找到了答案的一半。 整个屏幕上的动画非常棘手,但我在其他程序员的帮助下做到了。
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
int selectedRow = indexPath.row;
NSLog(@"touch on row %d", selectedRow);
PrototypeCell *prototypeCell =(PrototypeCell *)[tableView cellForRowAtIndexPath:indexPath];
if (prototypeCell.stretched == NO){
[UIView animateWithDuration:1 animations:^{
prototypeCell.View.frame = CGRectMake(0, 0, 320, 120);}
completion: nil];
prototypeCell.stretched = YES;}
else {
[UIView animateWithDuration:1 animations:^{
prototypeCell.View.frame = CGRectMake(0, 0, 15, 120);}
completion: nil];
prototypeCell.stretched = NO;
}
}
我必须创建PrototypeCell才能获得对视图的访问权限。这是解决问题的一半。 :) 当我第二次触摸它时它甚至会回滚。