0

我正在尝试在我的应用程序中创建一个动画,它将一个框架向上滑动到我想要的位置。框架上也会有其他按钮和文本。

我无法为此使用操作表,因为它从窗口的最底部开始。我想要创建的内容如下图所示。

在此处输入图像描述

我要制作动画的框架是具有捕获模式的框架:文本。

点击 tabView 上的按钮 我希望这个框架从 tabview 的顶部开始向上滑动。并再次单击该按钮应该使框架消失。

到目前为止,我的代码看起来像

-(IBAction)setting


{

    NSLog(@"finalShare Button");

    UIView *tempView;

    CGRect tmpFrame;

    tempView = [[[UIView alloc] initWithFrame:CGRectMake(0, 490, 320, 90)] 

                autorelease];

    [tempView setBackgroundColor:[UIColor clearColor]];

    [tempView setAlpha:.87];

    tempView.hidden = YES;

    [self.view addSubview:tempView];



    tmpFrame = tempView.frame;

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDuration:.75];

    tmpFrame.origin.y=390;

    self.view.frame=tmpFrame;

    [UIView commitAnimations];


}

我在这里面临的问题是,当我为我的框架设置动画以移动时,主视图会随之移动。这是我不希望它做的事情。

我是 iPhone 编程的新手,请指导我如何解决这个问题。或者有什么更好的方法来做到这一点。

谢谢

4

2 回答 2

1

您不需要隐藏视图,只需将其框架设置为 y 原点为 480 后将其添加为子视图。另外,不要使用旧的 UIView 动画方法;使用块。

这是一个以 0 为原点的 y 开始的视图示例。它位于等于其高度的负 y 处,作为子视图添加,然后向下动画以与从屏幕底部升起的键盘相接。

// add to view while completely off-screen
CGRect unlockViewFrame = unlockView.frame;
unlockViewFrame.origin.y = -unlockViewFrame.size.height;
unlockView.frame = unlockViewFrame;

[self.view addSubview:unlockView];

unlockViewFrame.origin.y = 0.;
[UIView animateWithDuration:0.3 animations:^{
    unlockView.frame = unlockViewFrame;
}];

这是相反的事情,使用完成块来删除视图。

unlockViewFrame.origin.y = -unlockViewFrame.size.height;

[UIView animateWithDuration:0.3 animations:^{
    view.frame = unlockViewFrame;
} completion:^(BOOL completion) {
    [view removeFromSuperview];
}];

我注意到的另一件事是您正在用代码做所有事情。考虑在 Interface Builder 中进行。一位聪明人曾经告诉我,你不写的代码不可能有任何错误,他是对的。在 IB 中创建视图并在需要时在代码中实例化它很容易:

NSArray* nibViews;
nibViews = [[NSBundle mainBundle] loadNibNamed:@"UnlockView" owner:self options:nil];
UnlockView *unlockView = [nibViews objectAtIndex:0];

另外,考虑使用 ARC。没有更多的自动释放!

于 2012-10-10T05:15:15.857 回答
0

您的主视图重置框架而不是 tempView

 [UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:.75];

tmpFrame.origin.y=390;

tempView.frame=tmpFrame; //it should be tempView not self.view ie main view

[UIView commitAnimations];
于 2012-10-10T05:12:58.953 回答