1

我有一个表格视图和一个图像视图,每个都占据屏幕的一半。当用户在图像视图上滑动以及选择表格单元格时,我正在尝试为图像视图设置动画。

我使用这段代码:

@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];
}

谁能告诉我为什么?!

4

4 回答 4

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];
  }
于 2013-05-18T10:37:38.603 回答
0

您只需要传递 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];
}
于 2013-05-18T10:35:15.320 回答
0

当用户点击表格行时没有任何反应,因为 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 有什么关系。

于 2013-05-18T10:55:19.200 回答
0

感谢您的回复,我也用这段代码解决了

    [self performSelectorOnMainThread:@selector(stuff) withObject:nil waitUntilDone:NO];

感谢@Hercules :)

于 2013-05-28T11:39:22.237 回答