在iPhone上,您可以通过三种不同的方式在不同的主屏幕之间切换。
您可以向左或向右滑动,下一个屏幕将分别动画显示。
触摸屏幕而不抬起手指可将屏幕向右或向左拖动。在通过临界点(距离更远,然后将屏幕减半)后,当您抬起手指时,下一个主屏幕会被动画化。
你触摸屏幕而不抬起手指就可以稍微拖动屏幕,如果你想要你可以停止拖动但仍然不要离开手指。并且您可以在相对较短的距离上向左或向右加速,它将向左或向右激活相应的屏幕。
如果我们互相专注地看第1点和第2点,我们发现它们很容易实现。对于第1点,它只是UISwipeGuestureRecognizer
,对于第2点,只有UIPanGuestureRecognizer
。
将1和2组合在一起似乎不是那么简单,因为滑动似乎占主导地位(我试图将它们与- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer
结合起来)。为了触发平移,我不得不将手指放在屏幕上并非常柔软地拖动以不触发滑动。
不要说第三点作为补充。对于我的知识状况来说,这似乎完全不合适。
这里有什么建议吗?非常感谢你提前。如果需要更多信息来解决这个问题,我很乐意提供。
答案 0 :(得分:4)
主屏幕只有UIScrollView
UIPageControl
就这么简单:)
示例:
// 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:
方法(例如从数据库加载内容)
- (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..
}
这只是向您展示如何做的一个例子。如果你正在使用数据库,或者如果每个视图都不同,你应该以不同的方式设置视图或检索数据,但逻辑是相同的......
答案 1 :(得分:1)