【发布时间】:2011-08-11 11:29:09
【问题描述】:
我认为这是一个非常基本的问题,但我正在努力解决这个问题。
我有一个屏幕截图(UIImage),我将其放入 UIView(在下面的示例中称为 screenShotView)。我想通过逐渐揭示这个screenShotView背后的东西来摆脱这个screenShotView。现在我的 screenShotView 向左挤压,但我希望它的 FRAME 越来越少,直到不再看到 screenShotView(没有挤压)。
这是我的代码。如果我使用 UITextView(而不是 UIImage)进行相同的转换,它将完全按照我希望的方式工作(无需转换)。
也许我没有理解框架 UIImages 的概念?
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:10];
[screenShotView setFrame:CGRectMake(0, 0, 0, 480)];
[UIView commitAnimations];
这就是它在动画中间的样子:
这就是我希望它在动画中间的样子:
这是根据 Codo 的建议更新的代码(见下文),结果我再也没有动画了。一旦按下按钮,就会弹出蓝屏。我想我在添加子视图时做错了——问题似乎是没有添加子视图,因此不会消失:
-(IBAction)showNextText
{
screenShotView = [[UIImageView alloc] initWithImage:[self screenshot]];
[screenShotView setFrame:CGRectMake(0, 0, 320, 480)];
[screenShotScrollView setFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubview:screenShotScrollView];
[screenShotScrollView addSubview:screenShotView];
screenShotScrollView.scrollEnabled = NO;
[self setUpNextText];
[self removeOldText];
}
-(void)setUpNextText
{
NSString* secondText = @"This is the second text shown if the user clicks next.";
textView.text = secondText;
textView.textColor = [UIColor redColor];
textView.backgroundColor = [UIColor blueColor];
}
-(IBAction)removeOldText{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5];
[screenShotScrollView setFrame:CGRectMake(0,0,320,480)];
[UIView commitAnimations];
}
【问题讨论】:
-
您需要的过渡类似于旧的星球大战电影?两个屏幕的位置和大小不会改变,只是一个在某一行重叠,并随着时间的推移隐藏另一个。对吗?
-
@Nick Weaver:没错!我应该考虑星球大战的。它就像一条线或窗帘,您向左移动。屏幕不会移动——只是屏幕显示的内容会发生变化。上面的从 100% 到 0%,下面的从 0% 到 100%。
-
我怀疑这种过渡是否可以轻松创建!不过我明天再看看。您应该考虑一些简单的 alpha 混合动画:看起来不错,并且可以在几分钟内创建。
-
@Nick Weaver:非常感谢。我知道 alpha 混合看起来不错,但是因为我想要翻页效果,所以我需要这种过渡。我按照 Codo 的建议使用 UIScrollView 进行了尝试,但到目前为止还没有运气。再次感谢您的帮助。
-
@n.evermind 你真的试过
UIView transitionFromView ...和 UIViewAnimationOptionTransitionFlipFromLeft 吗?还是 UIViewAnimationOptionTransitionCurlUp?看起来也不错:)
标签: iphone objective-c cocoa-touch uiimage