2011-01-21 32 views
6

Tôi là người mới bắt đầu khi nói đến kiểm soát trang, và đó là lý do tại sao tôi không chắc chắn 100% nếu tiêu đề của tôi đồng ý với những gì tôi muốn. Tôi muốn tạo một UIPageControl khi người dùng vuốt trên màn hình, khung nhìn sẽ chuyển sang chế độ xem khác và UIPageController ở cuối màn hình sẽ tự cập nhật. Ngoài ra, để làm cho yêu cầu của tôi thậm chí còn khó hiểu hơn, tôi muốn một thanh tab ở cuối màn hình sẽ vẫn được đặt khi thay đổi chế độ xem.UIViews với UIPageControl

Một ví dụ tuyệt vời của việc này là Ramp Champ của Iconfactory: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

Thanh ở phía dưới vẫn đặt trong khi phần còn lại của các mục trên di chuyển màn hình. Cách dễ nhất để làm điều này là gì?

EDIT: Tôi biết tôi phải sử dụng một UISrollView, tôi chỉ không biết làm thế nào để đi về việc thực hiện nó ...

Trả lời

22

Tôi tin rằng những gì bạn đang tìm kiếm thực sự là một UIScrollView với pagingEnabled thiết lập để VÂNG. Bạn có thể để scrollview như một khung nhìn trên một UITabBar thông thường. Bạn sẽ sử dụng một UIPageControl để có được các dấu chấm nhỏ. Bạn có thể cập nhật nó theo lập trình khi UIScrollView cuộn đến một trang bằng cách thực hiện một phương thức ủy nhiệm thích hợp của khung nhìn cuộn, có thể là -scrollViewDidScroll :.

Giả sử bạn có hai ivars: scrollView và pageControl. Khi bạn biết số lượng trang mà khung nhìn cuộn của bạn sẽ có, bạn có thể đặt contentSize của scrollView. Nó phải là bội số của giới hạn của scrollView. Ví dụ, nếu số lượng các trang tĩnh, bạn có thể hardcode nó trong -viewDidLoad của bạn ...

- (void)viewDidLoad { 
    // Any other code. 

    scrollView.pagingEnabled = YES; 
    scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width * 3, scrollView.bounds.size.height); // 3 pages wide. 
    scrollView.delegate = self; 
} 

Sau đó, để cập nhật các chấm nhỏ của bạn ...

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    CGFloat pageWidth = scrollView.bounds.size.width; 
    NSInteger pageNumber = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = pageNumber; 
} 
+0

Cảm ơn, bạn có bất kỳ loại mã nguồn nào về cách thực hiện việc này không? (Tôi không thể tìm thấy bất kỳ) –

+0

@Andy B, Có. Tôi đã chỉnh sửa câu trả lời của mình bằng cách tiếp cận chuẩn. –

+0

Tôi cảm thấy thực sự câm ngay bây giờ; nó vẫn không hề háo hức. –

2

Bạn cần phải sử dụng một UIScrollView

Giả sử bạn có một Ivar tên gọi scrollview

int amountOfFrames = 10; 
    scrollView.pagingEnabled = TRUE; 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * amountOfFrames, scrollView.frame.size.height); 
    scrollView.delegate = self; 

bạn sẽ sau đó cần phải thực hiện các phương pháp đại biểu cần thiết, do đó bạn có thể cập nhật kiểm soát trang của bạn

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    // Switch the indicator when more than 50% of the previous/next page is visible 
    CGFloat pageWidth = scrollView.frame.size.width; 
    int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = page; 
} 

Bạn cần phải đặt bất cứ nội dung bạn muốn được cuộn bên trong những scrollview, lý tưởng lazyload vào nó, nếu nội dung bạn sẽ hiển thị sẽ yêu cầu nhiều bộ nhớ heap, sử dụng scrollviewDidScroll để xóa và thêm nội dung ở các vị trí cần thiết

+0

Cảm ơn sự giúp đỡ, nhưng điều đó đã không ' t có ý nghĩa với tôi. Tôi đã được phát triển chỉ khoảng bảy tháng nay. Bạn có mã nguồn nào không? –

Các vấn đề liên quan