我想在我的应用程序中进行水平分页。我有大文本,放在 UITextView 中,但我想做水平分页,比如 iBooks 或 bookmate。你有什么解决方案或想法吗?
4 回答
看看新的(iOS 5)类UIPageViewController
。对于 iBooks 页面卷曲效果,请尝试使用
[controller initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
然后,您可以使用setViewControllers:direction:animated:completion:
. 有关此类的更多参考,请访问UIPageViewController 类参考。
使用这个名为PagedView的便捷类,它为您管理分页滚动视图以及视图加载/卸载和重用。
您必须实现两个委托方法才能使其正常工作:
- (NSUInteger)numberOfPagesInPagedView:(PagedView *)view;
- (UIView *)pagedView:(PagedView *)view viewForPageAtIndex:(NSUInteger)page;
如果您曾经使用过,它们会看起来很熟悉UITableView
。numberOfPagesInPagedView:
您只需返回要显示的页数。
- (NSUInteger)numberOfPagesInPagedView:(PagedView *)view
{
// return the number of pages in the paging view
return 10;
}
在pagedView:viewForPageAtIndex:
您必须返回特定页面索引的视图。dequeueReusableViewWithIdentifier:
您可以通过将消息发送到分页视图来重用视图。
- (UIView *)pagedView:(PagedView *)pagedView viewForPageAtIndex:(NSUInteger)page
{
static NSString *reuseIdentifier = @"PageIdentifier";
UIView *view = [pagedView dequeueReusableViewWithIdentifier:reuseIdentifier];
if(view == nil) {
view = [[[MyPageView alloc] initWithFrame:view.bounds] autorelease];
}
// add contents specific to this page index to the view
return view;
}
为了使视图重用工作,您的UIView
子类 ( MyPageView
) 应符合ReusableObject
协议并实现reuseIdentifier
(在这种情况下您将返回@"PageIdentifier"
)。
我已经在许多项目中使用过这个类,并且效果很好。
您可以使用 UIWebView(UIScrollView 的子类)来满足您的水平分页需求。
要使其正常工作,您需要根据 Web 视图的大小(和高度)拆分用于存储文本的 NSString。
将拆分的 NSString 存储到 NSArray 中,然后根据用户滑动,加载正确的“页面”(数组索引)并显示动画。
希望有帮助。
打开 pageEnabled 的 UIScrollView?