来自 UITableView 的动画 UIView
Posted
技术标签:
【中文标题】来自 UITableView 的动画 UIView【英文标题】:Animation UIView from UITableView 【发布时间】:2013-05-18 10:25:57 【问题描述】:我有一个表格视图和一个图像视图,每个都占据屏幕的一半。 当用户在图像视图上滑动并选择表格单元格时,我正在尝试为图像视图设置动画。
我使用这个代码:
@interface X()
@property (strong, nonatomic) IBOutlet UIImageView *ImagePreview;
@property (strong, nonatomic) IBOutlet UITableView *table;
@end
@implementation X
- (void)handleGestureRight:(UISwipeGestureRecognizer *)sender
[self ShowAnimation:_ImageGalaryPreview];
-(void)ShowAnimation:(UIImageView *)view
[UIView beginAnimations: @"Slide Image" context: NULL];
[UIView setAnimationDuration: 1];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:view cache:NO];
[UIView commitAnimations];
@end
当我在滑动后调用它时它工作得很好,但是当我从 UITableView
类实例调用它时它不起作用!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self ShowAnimation:_ImageGalaryPreview];
谁能告诉我为什么?!
【问题讨论】:
你指的是哪种方法? 第一段代码在哪里? 你是如何调用第一段代码的?它是否位于某人的方法中?那么你是怎么调用这个方法的呢? 当它们从选定的行中释放出来时,我看不出你在 didSelectRowAtIndexPath 方法中调用这些代码行的意义。 我不明白你,这段代码是用来动画视图的,它是苹果写的,不是我写的。 【参考方案1】:使用下面给出的调用方法,它肯定会工作。
-(void)stuff
[UIView beginAnimations: @"Slide Image" context: NULL];
[UIView setAnimationDuration: 1];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:ـImagePreview cache:NO];
[UIView commitAnimations];
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self performSelectorOnMainThread:@selector(stuff) withObject:nil waitUntilDone:NO];
【讨论】:
谢谢,在同一类中设置两个视图的控制器后,它工作了【参考方案2】:你只需要传递 tableview 的视图来代替 imageView....检查它的工作原理..享受
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[UIView beginAnimations: @"Slide Image" context: NULL];
[UIView setAnimationDuration: 1];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: tableView cache:NO];
[UIView commitAnimations];
【讨论】:
我不想为表格设置动画,我想为表格外的 imageView 设置动画 你把你的图像视图放在哪里? 在主视图中,我有一个表格视图和一个图像视图,每个都占据屏幕的一半 ok 意味着你想在点击 tablecell 时为 imageview 设置动画。对吗? ok 使用相同的代码 & 代替 tableview pass imageview。并在 imageview 中放置一张图像以查看效果...【参考方案3】:当用户点击表格行时不会发生任何事情,因为 didSelectRowAtIndexPath 方法中的任何行都不包含与 indexPath.row 相关的任何内容。也许,试试下面的方法。
@interface ViewController ()
NSInteger selectedrow;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSIndexPath *selectedIndexPath = [table indexPathForSelectedRow];
selectedrow = indexPath.row;
if (indexPath.row >= 0)
[UIView beginAnimations: @"Slide Image" context: NULL];
[UIView setAnimationDuration: 1];
...
...
ImagePreview = ... [array objectAtIndex:selectedrow]...
- (void)viewDidLoad
selectedrow = -1;
不过,我不知道您的代码与 UIImageView 有什么关系。
【讨论】:
你最好从基础开始。【参考方案4】:感谢您的回复,我也用这段代码解决了它
[self performSelectorOnMainThread:@selector(stuff) withObject:nil waitUntilDone:NO];
感谢@Hercules :)
【讨论】:
以上是关于来自 UITableView 的动画 UIView的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 中的 UIView 动画在重新加载数据后不起作用