可可触摸试图在它再次弹出之前延迟uiview的动画

Posted

技术标签:

【中文标题】可可触摸试图在它再次弹出之前延迟uiview的动画【英文标题】:cocoa touch trying to delay the animation of the uiview before it pops out again 【发布时间】:2013-05-09 03:31:34 【问题描述】:

我有一个 UIView 作为 2 个表视图的容器。我有两个按钮来控制如何在这些 tableviews 上加载数据。基本上,当点击 1 个按钮时,uiview 会滑出以显示与该按钮相关的 tableview,而当另一个按钮被点击时,我需要它:

    关闭 隐藏第一个表视图 然后取消隐藏第二个 tableview 然后 uiview 滑出

这就是我所拥有的

[UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationDelay:0.0];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

        if(!isTableOpen)

            [self.fighterTableView setHidden:YES];
            [self.matchTableView setHidden:NO];

            isTableOpen = YES;

            viewTableContainer.frame = CGRectMake(0, 0, 352, 700);

            [self.view bringSubviewToFront:viewTableContainer];
            [UIView commitAnimations];

        else
            //isTableOpen = NO;
            viewTableContainer.frame = CGRectMake(-352, 0, 352, 700);
            [UIView commitAnimations];
            [self.fighterTableView setHidden:YES];
            [self.matchTableView setHidden:NO];
            viewTableContainer.frame = CGRectMake(0, 0, 352, 700);
            [UIView commitAnimations];
        

这里的问题在于 else 语句中的提交动画,我试图设置隐藏属性,然后再次弹出 uiview。发生的事情是它只是隐藏和取消隐藏 tableview 但动画永远不会发生。我觉得我需要使用延迟,但我知道该怎么做,除非有更体面的方式来处理这个??

想法?

【问题讨论】:

【参考方案1】:

而不是使用setHidden 方法。为什么不尝试使用setAlpha 方法。

会是这样的:

[UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:0.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    if(!isTableOpen)

        [self.fighterTableView setAlpha:0.0];
        [self.matchTableView setAlpha:1.0];

        isTableOpen = YES;

        viewTableContainer.frame = CGRectMake(0, 0, 352, 700);

        [self.view bringSubviewToFront:viewTableContainer];
        [UIView commitAnimations];

    else
        //isTableOpen = NO;
        viewTableContainer.frame = CGRectMake(-352, 0, 352, 700);
        [UIView commitAnimations];
        [self.fighterTableView setAlpha:0.0];
        [self.matchTableView setAlpha:1.0];
        viewTableContainer.frame = CGRectMake(0, 0, 352, 700);
        [UIView commitAnimations];
    

我建议你执行[UIView setAnimationDidStopSelector:@selector(myAnimationMethod)]

而不是将 matchTableView 的 alpha 设置为 1.0,而是将其设置在 myAnimationMethod 内。

所以是这样的:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelay:0.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(myAnimationMethodDidFinish:)]
if(!isTableOpen)

    [self.fighterTableView setAlpha:0.0];

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700);

    [self.view bringSubviewToFront:viewTableContainer];
    [UIView commitAnimations];

else
    //isTableOpen = NO;
    viewTableContainer.frame = CGRectMake(-352, 0, 352, 700);
    [self.fighterTableView setAlpha:0.0];
    [UIView commitAnimations];

-(void) myAnimationMethodDidFinish:(id) sender 

[UIView setAnimationDuration:0.5];
 [UIView setAnimationDelay:0.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
 if(!isTableOpen)

   [self.matchTableView setAlpha:1.0];

    isTableOpen = YES;

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700);

    [self.view bringSubviewToFront:viewTableContainer];
    [UIView commitAnimations];

else
    //isTableOpen = NO;
    [self.matchTableView setAlpha:1.0];
    viewTableContainer.frame = CGRectMake(0, 0, 352, 700);
    [UIView commitAnimations];


【讨论】:

您可以根据自己的需要更改延迟时间。 该方法会在“commitAnimations”部分之后执行吗?我下班后尽快试试这个。 另外,我不必从 if else 中删除 viewtablecontainer.frame,因为它已经在 animationmethoddidfinish 上吗?还是没有? 查看已发布的第一个代码将起作用。第二个代码是让你在动画中更加流畅。理想情况下,第一个应该帮助你。如果没有,那么您可以选择第二个。:) 我的第二个代码中有一个小错误,删除了 viewcontainer 部分。我已经更新了。 所以使用第二个,它在 [UIView setAnimationDuration:0.5]; (第一个在顶部)当我点击第一个按钮,然后是第二个按钮,然后再次点击第一个按钮。错误是 EXC_Breakpoint EXC_1386_BPT

以上是关于可可触摸试图在它再次弹出之前延迟uiview的动画的主要内容,如果未能解决你的问题,请参考以下文章

可可触摸:如何找出被触摸的对象

添加延迟动画时,UIView 动画不起作用

动画 UIView 的内容未接收到触摸事件

具有原点的动画 UIView 无法正常工作

如何在可可触摸中切换视图?

可可触摸:在继续之前等待方法完成