我尝试在我的应用中创建一个动画,它会将一个帧向上滑动到我想要的位置。框架上还有其他按钮和文字。
我无法使用动作表,因为它从窗口的最底部开始。我想要创建的内容如下图所示。
我想要制作动画的帧是具有捕捉模式的帧:文本。
单击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编程的新手,请指导我该如何解决这个问题。 或者更好的方法是做什么。
谢谢
答案 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];