左右滑动 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的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 和滑动手势

从左侧(或右侧)滑动UIView的动画事务

Android 左右滑动+上下滑动 怎么实现

H5页面切换,左右滑动和上下滑动,哪种好?

h5页面上下左右滑动

android怎么实现页面的左右滑动