单击按钮时无法仅为框架设置动画以向上滑动。

时间:2012-10-10 04:58:02

标签: iphone objective-c xcode

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

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

enter image description here

我想要制作动画的帧是具有捕捉模式的帧:文本。

单击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编程的新手,请指导我该如何解决这个问题。 或者更好的方法是做什么。

谢谢

2 个答案:

答案 0 :(得分:1)

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

以下是以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。不再自动释放了!

答案 1 :(得分: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];