左右滑动 UIView
Posted
技术标签:
【中文标题】左右滑动 UIView【英文标题】:Sliding a UIView left and right 【发布时间】:2012-01-29 18:09:50 【问题描述】:我正在尝试为 UIView 设置动画以左右滑动。我尝试的是截取当前视图的屏幕截图,而不是用屏幕截图替换视图,同时更新屏幕外视图的内容,然后制作动画。但是屏幕截图没有显示在屏幕上。在原始视图滑回屏幕之前,它只是黑色。这是我正在使用的代码:
UIGraphicsBeginImageContext(self.view.window.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)];
iv.image = image;
[self.view.window insertSubview:iv aboveSubview:self.view];
self.view.frame = CGRectMake(-self.view.frame.size.width, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
[UIView transitionWithView:self.view duration:0.5 options:UIViewAnimationOptionCurveEaseInOut animations:^
iv.frame = CGRectMake(self.view.frame.size.width*2, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
[self loadData];
self.view.frame = CGRectMake(0, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
completion:NULL];
[iv removeFromSuperview];
[iv release];
【问题讨论】:
【参考方案1】:我发现了问题。我只需要在完成块中做[iv removeFromSuperview];
。现在它正在工作。
【讨论】:
你能发布最终代码吗?我正在听从您的建议,但仍然遇到您描述的问题(屏幕截图未出现)。 @user664939 我真的不知道我用这个做什么。但是从我的回答来看,你可以只添加一个完成块来移除视图。 感谢您回复我的评论。我能够根据这个和其他一些问题让它工作。【参考方案2】:通常您的应用中只需要一个窗口,即包含您所有视图的窗口,所以self.view.window
不是一个好方法,我认为...
如果我有您想要实现的目标,那么容器视图可能是正确的解决方案。
例如,假设您正在使用 iPhone:
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 960.0f, 480.0f)];
firstView.frame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
secondView.frame = CGRectMake(320.0f, 0.0f, 320.0f, 480.0f);
thirdView.frame = CGRectMake(640.0f, 0.0f, 320.0f, 480.0f);
[containerView addSubview:firstView];
[containerView addSubview:secondView];
[containerView addSubview:thirdView];
现在您的 containerView 包含三个视图。向左或向右移动您的 containerView 以显示您喜欢的视图并隐藏其他两个视图,然后更新屏幕外的视图。
另一种方法是使用 UIScrollView 作为 containerView。
希望这会有所帮助...
编辑:对不起,我误解了你的问题。 下次试试……
添加屏幕截图时,将其添加到屏幕右侧(屏幕外)
UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)];
iv.image = image;
[self.view.window insertSubview:iv aboveSubview:self.view];
然后您将原始视图移动到左侧(屏幕外)
self.view.frame = CGRectMake(-self.view.frame.size.width, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
但是你没有显示你的截图,所以视图是空白的。
我认为你必须改变这一点
UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)];
到这里
UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)];
或者你可以添加一个动画从右边显示它。
【讨论】:
就像我在问题中所说的那样,我只使用两个视图,而不是三个。这个想法是我想重用self.view。这就是我使用图像视图的原因。 我只使用一个窗口。 self.view.window 是应用程序的主窗口。 啊...我明白了...我在想您的问题是左右滑动(查看您的标题)而不是显示您的屏幕截图。看看我的编辑。以上是关于左右滑动 UIView的主要内容,如果未能解决你的问题,请参考以下文章