首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iPhone上的主屏幕之间导航时实现pan/swipe效果的相同组合?

如何在iPhone上的主屏幕之间导航时实现pan/swipe效果的相同组合?
EN

Stack Overflow用户
提问于 2012-10-22 15:57:00
回答 2查看 396关注 0票数 1

在iPhone上,您可以通过三种不同的方式在不同的主屏幕之间切换。

  1. 你可以向左或向右滑动,下一个屏幕将被动画化。
  2. 你触摸屏幕,而不提起手指,你把屏幕拖到右边或左边。通过临界点(这是一个更多的距离,然后减半的屏幕),下一个主屏幕是动画当你举起你的手指。
  3. 你触摸屏幕,而不提起手指,你拖动屏幕一点点,如果你想要你可以停止拖动,但仍然不能离开手指。你可以在相对较短的距离内向左或向右加速,它将在相应的屏幕上向左或向右动画。

如果我们只关注第1点和第2点,我们会发现它们很容易实现。它只是点1的UISwipeGuestureRecognizer和2的UIPanGuestureRecognizer

将1和2组合起来似乎并不那么简单,因为滑动似乎占主导地位(我试图将它们与- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer结合起来)。为了触发平底锅,我不得不把我的手指放在屏幕上,拖动非常柔软,以免触发滑动。

更不用说补充第三点了。对我的知识来说,这似乎是完全不正常的。

这里有什么建议吗?先谢谢你。如果需要更多的信息来解决这个问题,我会很乐意提供的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 16:03:28

主屏幕只是一个带有UIScrollViewUIPageControl,很简单:)

例子:

代码语言:javascript
运行
复制
// MyViewController.h
@interface MyViewController : UIViewController <UIScrollViewDelegate> {
    UIScrollView *_scrollView;
    UIPageControl *_pageControl;
}

// MyViewController.m
// in your viewDidLoad method
int numberOfPages = 3;
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,
                                                                 self.view.frame.size.height)];
 [_scrollView setContentSize:CGSizeMake(numberOfPages*_scrollView.frame.size.width, _scrollView.frame.size.height)];
 [_scrollView setPagingEnabled:YES];
 [_scrollView setShowsHorizontalScrollIndicator:NO];
 [_scrollView setDelegate:self];
 [self.view addSubview:_scrollView];

 _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, _scrollView.frame.size.height-30, _scrollView.frame.size.width, 20)];
 [_pageControl setNumberOfPages:numberOfPages];
 [_pageControl setCurrentPage:0];
 [self.view addSubview:_pageControl];

for (int i=0; i<numberOfPages; i++) {
   CGRect frame = _scrollView.frame;
   frame.origin.x = frame.size.width * i;
   frame.origin.y = 0;
   UIView *view = [UIView alloc] initWithFrame:frame];
   //Setup your view     
   [_scrollView addSubview:view];
}

如果希望对当前显示的视图执行特定方法,请使用scrollViewDidScroll:方法(例如,从数据库加载内容)。

代码语言:javascript
运行
复制
- (void)scrollViewDidScroll:(UIScrollView *)sender {
    CGFloat pageWidth = _scrollView.frame.size.width;
    int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    _pageControl.currentPage = page;

    //do whatever you want..
}

这只是个例子,向你展示你能做些什么。如果您使用的是数据库,或者每个视图不同,您应该以不同的方式设置视图或检索数据,但是逻辑是相同的.

票数 4
EN

Stack Overflow用户

发布于 2012-10-22 16:46:00

WWDC 2012视频

  • 查看如何使用滚动视图增强用户体验

WWDC 2011视频

  • 查看高级滚动视图技术
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13015156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档