Iphone 无法仅为一帧设置动画,以便在单击按钮时向上滑动。

Iphone 无法仅为一帧设置动画,以便在单击按钮时向上滑动。,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在尝试在我的应用程序中创建一个动画,它将向上滑动一帧到我想要的位置。框架上还有其他按钮和文本 我无法使用actionsheet进行此操作,因为它从窗口的最底部开始。我想创建的内容如下图所示 我要设置动画的帧是具有捕获模式的帧:文本 单击选项卡视图上的按钮“我希望此框架从选项卡视图顶部开始向上滑动”。再次点击按钮应该会使画面消失 到目前为止,我的代码看起来像 -(IBAction)setting { NSLog(@"finalShare Button"); UIVie

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

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

我要设置动画的帧是具有捕获模式的帧:文本

单击选项卡视图上的按钮“我希望此框架从选项卡视图顶部开始向上滑动”。再次点击按钮应该会使画面消失

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

-(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编程新手,请指导我如何解决这个问题。 或者有什么更好的方法可以做到这一点


感谢您重新设置主视图的框架,而不是临时视图

 [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];

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

下面是一个以y原点0开始的视图示例。它被定位在与高度相等的负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];
}];
我注意到的另一件事是,您正在用代码做所有事情;考虑在接口生成器中做它。一个聪明人曾经告诉我,你不写的代码不会有任何bug,他是对的。在IB中创建视图并在需要时在代码中实例化它很容易:

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

也可以考虑使用ARC。不再自动释放

更改
self.view.frame=tmpFrame编码到您的_view.frame中