2011-10-24 27 views
6

Tôi có một thiết lập ngang Thiết lập UIScrollview (nghĩa là không phải cuộn lên và xuống mà chỉ cuộn xuống bên trái) và khi khởi chạy ứng dụng, tôi muốn cuộn này cuộn sang trái, sau đó phải "thể hiện" khả năng cuộn của nó - và cuối cùng dừng lại, cho phép người dùng sau đó tiếp quản và điều khiển cuộn theo cách thủ công bằng ngón tay của họ. Mọi thứ đều hoạt động - ngoại trừ bản trình diễn cuộn bên trái phải tải này.Làm thế nào để bạn lập trình buộc cuộn bằng UIScrollView?

tôi không sử dụng giao diện Builder cho bất kỳ này, tôi đang làm tất cả mọi thứ với mã:

//(this is in viewDidLoad:) 
// Create the scrollView: 
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)]; 
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView 
[mainView addSubview:photosScroll]; 


// Set the photoScroll's delegate: 
photosScroll.delegate = self; 

// Create a frame to which to scroll: 
CGRect frame = CGRectMake(10, 10, 80, 150); 
// Scroll to that frame: 
[photosScroll scrollRectToVisible: frame animated:YES]; 

Vì vậy, tải scrollview thành công và tôi có thể di chuyển nó sang trái và phải với ngón tay của tôi - nhưng nó không làm điều này "tự động di chuyển" như tôi đã hy vọng nó sẽ.

  • Tôi đã thử gọi scrollRectToVisible trước và sau khi thêm scrollView làm chế độ xem phụ - không hoạt động.
  • Suy nghĩ có lẽ điều này nên xảy ra trong loadView chứ không phải trong viewDidLoad? Nhưng nếu vậy, làm thế nào?

Bất kỳ ý tưởng nào?

Trả lời

5

Một vài cách để làm điều này:

  1. Sử dụng scrollRectToVisible:animated: cho một giá trị zero X và sau đó một largeish một tích cực, sau đó đặt nó trở lại điểm giữa của bạn. Bạn có thể gọi phương thức sau khi chế độ xem cuộn được thêm dưới dạng một chế độ xem phụ (có thể trước đó, nhưng tốt nhất là an toàn). Bạn sẽ cần phải tính toán giá trị của X ở bên trái màn hình bằng cách sử dụng contentSize và kiến ​​thức về độ rộng của các phần tử khác nhau trong chế độ xem cuộn.
  2. Vì bạn chỉ thực hiện hoạt ảnh nhanh và điều khiển người dùng, điều này thực sự có thể là hoạt ảnh nhanh chóng và bẩn, do đó bạn có thể sử dụng setContentOffset:animated: để buộc nội dung của chế độ xem di chuyển tương đối so với chế độ xem hiện tại của bạn Chức vụ. Di chuyển các phần tử bên phải cho một cuộn trái (giá trị X dương), sau đó để lại gấp hai lần cho một cuộn bên phải (giá trị X âm), sau đó đặt độ lệch về 0.

Bạn không được đặt một trong các số này trong viewDidLoad hoặc loadView; đặt chúng trong viewDidAppear, đó là sau khi scrollview của bạn thực sự được vẽ trên màn hình. Bạn chỉ quan tâm đến hoạt ảnh khi người dùng có thể nhìn thấy chúng!

+0

bạn có ý gì đó như thế này không? CGRect frame = CGRectMake (800, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; frame = CGRectMake (0, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; nguyên nhân không hoạt động ... – sirab333

+0

Đối với # 1, có, nhưng bạn không cần phải làm cho 'khung' bạn cuộn đến kích thước của toàn bộ khung nhìn. Bạn có thể làm 'CGRectMake (800, 0, 1, 1)' nếu bạn thích, và sau đó 'CGRectMake (0, 0, 1, 1)'. Để di chuyển vùng từ 800 pixel đến 1600 pixel vào khung nhìn, bạn có thể cuộn đến '(1599, 0, 1, 1)', và sau đó để cuộn khu vực từ 0 đến 800 trở lại dạng xem, bạn có thể cuộn đến '(0 , 0, 1, 1) '. – darvids0n

+0

oh ok hãy để tôi thử điều này trong viewDidAppear ... – sirab333

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