通过滑动切换视图的方法

时间:2011-07-03 09:09:36

标签: iphone objective-c ios

我正在构建显示新闻文章的iPhone应用程序。

为了阅读一篇文章,我有一个带UITableView的视图,它显示了文章的内容。

我需要什么: 我希望用户能够用手指滑动到下一篇文章,效果就像苹果的pageControl样本,或者像在图片之间滑动一样。(来回移动视觉效果)

问题: 唯一的方法是使用UIScrollView和“pages”, 或者有简单的方法,包括检测滑动+操纵开关效果+推动视图控制器?

我想到的其他方向是,如果我可以使用一个水平tableview创建一个视图,每个单元格将显示一篇文章,用户将滑动以移动到下一个单元格。

用于iphone的BTW-fox新闻应用程序具有此功能,但似乎他们使用“页面控制”解决方案。

任何信息都会有所帮助。

1 个答案:

答案 0 :(得分:7)

页面控制不是我认为的唯一解决方案。 想象一下,你在viewController中查看了视图,然后当你检测到滑动及其方向时, 你只需要:

  1. 将内容添加到将出现的视图
  2. 将视图添加为视图控制器的子视图
  3. 将视图放在正确的一侧(如果用户向右滑动,则在左侧)
  4. 最后动画视图移动(位置)到正确的方向
  5. 你已经完成了......

    以下是一个例子:

    // in your uiviewcontroller subclass
    UIVIew *viewOne, *viewTwo;
    
    -(void)swipeFromView:(UIVIew *)visibleView
                  toView:(UIView *)pushingView
               direction:(UISwipeGestureRecognizerDirection)aDirection {
        // assuming the content of pushingView already set
        CGPoint visibleViewCenter = [visibleView center]; // register the center
        CGRect visibleViewFrame = [visibleView frame];
        CGPoint pushingViewCenter, visibleViewNewCenter;
    
        visibleViewNewCenter.y = visibleViewCenter.y;
        pushingViewCenter.y = visibleViewCenter.y;
    
        // I use 2 here, but you would make more calculations
        pushingViewCenter.x = 2 * visibleViewFrame.width;
        visibleViewNewCenter.x = -1 * 2 * visibleViewFrame.width;
        // reversing x if direction is right
        if(aDirection == UISwipeGestureRecognizerDirectionRight) {
            pushingViewCenter.x *= -1;
            visibleViewNewCenter.x *= -1;
        }
        // once the tmp center for pushingView is calculated
        // set it, and run the animation
        [pushingView setCenter:pushingViewCenter];
        [UIVIew animateWithDuration:theDurationYouWant
                         animations:^{
            [visibleView setCenter:visibleViewNewCenter];
            [pushingView setCenter:visibleViewCenter];
        }];
    }
    
    // somewhere else, you handle the swipe
    -(void)handleSwipeGesture:(UISwipeGestureRecognizer *)sender {
        // set content, etc
        [self swipeFromView:viewOne toView:viewTwo direction:[sender direction]];
    }
    

    希望这有帮助。