来自 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 动画在重新加载数据后不起作用

键盘动画移动 UITableView 部分标题

用动画调整 UIView 的大小,子视图不会动画

将 UIView(来自情节提要)修复到 UITableView 的顶部

动画 UITableView 调整大小

动画 UIView 没有按预期工作