Iphone 如何在不失真的情况下逐渐减小图像帧的宽度?
我认为这是一个非常基本的问题,但我正在努力解决这个问题 我有一个截图(一个UIImage),我把它放在一个UIView中(在下面的示例中称为screenShotView)。我想通过逐渐揭示这个截屏视图背后的内容来摆脱这个截屏视图。现在我的截屏视图向左挤压,但我希望它的帧越来越小,直到不再看到截屏视图(不挤压) 这是我的密码。如果我使用UITextView(而不是UIImage)进行相同的转换,它将完全按照我希望的方式工作(无需转换) 也许我不明白图像的概念Iphone 如何在不失真的情况下逐渐减小图像帧的宽度?,iphone,objective-c,cocoa-touch,uiimage,Iphone,Objective C,Cocoa Touch,Uiimage,我认为这是一个非常基本的问题,但我正在努力解决这个问题 我有一个截图(一个UIImage),我把它放在一个UIView中(在下面的示例中称为screenShotView)。我想通过逐渐揭示这个截屏视图背后的内容来摆脱这个截屏视图。现在我的截屏视图向左挤压,但我希望它的帧越来越小,直到不再看到截屏视图(不挤压) 这是我的密码。如果我使用UITextView(而不是UIImage)进行相同的转换,它将完全按照我希望的方式工作(无需转换) 也许我不明白图像的概念 [UIView beginAnima
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:10];
[screenShotView setFrame:CGRectMake(0, 0, 0, 480)];
[UIView commitAnimations];
这就是动画中间的样子:
<> P>这就是我希望它在动画中间的样子:这是根据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];
}
不要设置
帧的动画
,而是设置中心的动画
。请参阅文档
另外,如果您只需要iOS 4兼容性,请使用-animateWithDuration:animations:
[UIView animateWithDuration:10
animations:^{ screenShotView.center = CGPointMake(x, y) } ];
不要设置
帧的动画
,而是设置中心的动画
。请参阅文档
另外,如果您只需要iOS 4兼容性,请使用-animateWithDuration:animations:
[UIView animateWithDuration:10
animations:^{ screenShotView.center = CGPointMake(x, y) } ];
我不确定我是否完全理解你希望你的观点如何消失 如果希望变得越来越透明,请使用以下代码(而不是setFrame): 如果它应该变得越来越小(但保持其中心),那么尝试:
[screenShotView setFrame:CGRectMake(screenShotView.frame.x, screenShotView.frame,y, 0, 0)];
我不确定我是否完全理解你希望你的观点如何消失 如果希望变得越来越透明,请使用以下代码(而不是setFrame): 如果它应该变得越来越小(但保持其中心),那么尝试:
[screenShotView setFrame:CGRectMake(screenShotView.frame.x, screenShotView.frame,y, 0, 0)];
问题的答案 其实很简单:我制作了一个示例应用程序,让《星球大战》(这里简称为《星球大战》)的过渡运行起来。为了简单起见,我将这两个视图称为firstView和secondView。第一视图显示(将是您的屏幕截图),第二视图将从左侧滑入。我在每个视图上都放置了一个按钮来设置过渡动画,它是wirde to
doTransition
。重要的部分是设置滑入视图的属性clipsToBounds=YES
和autoresizesSubviews=NO
。就这样。我会发布一些截图
- (void)viewDidLoad
{
[super viewDidLoad];
secondView.frame = CGRectMake(0, 0, 0, 480);
secondView.clipsToBounds = YES;
secondView.autoresizesSubviews = NO;
[self.view addSubview:firstView];
[self.view addSubview:secondView];
}
- (IBAction)doTransition
{
[UIView animateWithDuration:1.0
animations:^{
self.secondView.frame = CGRectMake(0,
0,
320,
480);
}];
}
页面卷曲研究
我对翻页/卷曲效果做了一些研究。这主要都存在于iOS中,不费吹灰之力就可以创建iBook翻页效果,但它访问的是私有方法和类。我仍然鼓励任何人去看看它,因为它可能有一天会被打开
- -Steven Troughton Smith的演示应用程序
- -一款由Tom Brow定制的卷曲页面应用程序,经过试用、编译,看起来很不错
- -关于Tom Brow的Leaves应用程序的文章,该应用程序由作者Ole Begemann分支()
- -使用MacOS演示应用程序,非常专业和先进,尽管不是一个仍然鼓舞人心的快速拍摄选项。下载应用程序
- -数学方法
- 问题的答案
其实很简单:我制作了一个示例应用程序,让《星球大战》(这里简称为《星球大战》)的过渡运行起来。为了简单起见,我将这两个视图称为firstView和secondView。第一视图显示(将是您的屏幕截图),第二视图将从左侧滑入。我在每个视图上都放置了一个按钮来设置过渡动画,它是wirde to
doTransition
。重要的部分是设置滑入视图的属性clipsToBounds=YES
和autoresizesSubviews=NO
。就这样。我会发布一些截图
- (void)viewDidLoad
{
[super viewDidLoad];
secondView.frame = CGRectMake(0, 0, 0, 480);
secondView.clipsToBounds = YES;
secondView.autoresizesSubviews = NO;
[self.view addSubview:firstView];
[self.view addSubview:secondView];
}
- (IBAction)doTransition
{
[UIView animateWithDuration:1.0
animations:^{
self.secondView.frame = CGRectMake(0,
0,
320,
480);
}];
}
页面卷曲研究
我对翻页/卷曲效果做了一些研究。这主要都存在于iOS中,不费吹灰之力就可以创建iBook翻页效果,但它访问的是私有方法和类。我仍然鼓励任何人去看看它,因为它可能有一天会被打开
- -Steven Troughton Smith的演示应用程序
- -一款由Tom Brow定制的卷曲页面应用程序,经过试用、编译,看起来很不错
- -关于Tom Brow的Leaves应用程序的文章,该应用程序由作者Ole Begemann分支()
- -使用MacOS演示应用程序,非常专业和先进,尽管不是一个仍然鼓舞人心的快速拍摄选项。下载应用程序
- -数学方法
基本上,然后使用UIScrollView为内部视图引入单独的坐标系。当外部视图(滚动视图)变小时,它不会扭曲内部视图,而是将其剪裁。我想您必须将上部视图放在UIScroll视图中。然后将内容大小设置为与UIScrollView的大小相同,并禁用滚动
CGRect fillRect = self.view.bounds;
leftImageView.clipsToBounds = YES;
leftImageView.contentMode = UIViewContentModeTopLeft;
leftImageView.frame = fillRect;
rightImageView.clipsToBounds = YES;
rightImageView.contentMode = UIViewContentModeTopRight;
rightImageView.frame = CGRectMake(fillRect.size.width, 0, 0, fillRect.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
leftImageView.frame = CGRectMake(0, 0, 0, fillRect.size.height);
rightImageView.frame = fillRect;
[UIView commitAnimations];
接下来,在UIScrollView上执行原始动画(setFrame)
基本上,然后使用UIScrollView为内部视图引入单独的坐标系。当外部视图(滚动视图)变小时,它不会扭曲内部视图,而是将其剪裁。非常感谢,但我该如何做到这一点<代码>[screenShotView设置中心:CGRectMa
CGRect fillRect = self.view.bounds;
leftImageView.clipsToBounds = YES;
leftImageView.contentMode = UIViewContentModeTopLeft;
leftImageView.frame = fillRect;
rightImageView.clipsToBounds = YES;
rightImageView.contentMode = UIViewContentModeTopRight;
rightImageView.frame = CGRectMake(fillRect.size.width, 0, 0, fillRect.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
leftImageView.frame = CGRectMake(0, 0, 0, fillRect.size.height);
rightImageView.frame = fillRect;
[UIView commitAnimations];