2010-04-23 36 views
7

Tôi cần tạo chế độ xem trên iPhone để cuộn ngang qua thư viện hình ảnh. Vấn đề là bộ sưu tập này có tiềm năng có từ 100 đến 1000 hình ảnh cần được trình bày, vì vậy tôi muốn tránh tải tất cả chúng vào một UIScrollView cùng một lúc và phá hủy hiệu suất. Tôi cần tạo một khung nhìn để tái chế các đối tượng khung nhìn (như UITableView) để tăng hiệu suất và giảm chi phí bộ nhớ, nhưng nó cần phải cuộn theo chiều ngang.Bảng cuộn ngang của iPhone

Bất kỳ ý tưởng nào? Có thể thực hiện thao tác UITableView theo chiều ngang không?

Cảm ơn!

Trả lời

1

Bạn có thể sử dụng chế độ xem cuộn lớn và theo dõi vị trí cuộn để thay đổi. Bạn có thể thêm hình ảnh dưới dạng các bản xem trước khi chúng đến khu vực có thể xem thực tế và xóa chúng khi chúng được cuộn đi.

Bằng cách này, bạn chỉ phải có một số lượng nhỏ lượt xem hình ảnh có mặt tại bất kỳ thời điểm nào, nhưng bạn cho sự xuất hiện của tất cả chúng là "ở đó".

Bạn thậm chí có thể tái chế các chế độ xem hình ảnh bằng cách thay đổi hình ảnh và vị trí của chúng để bạn không tạo và hủy các đối tượng phức tạp. Đây là những gì UITableView làm với các tế bào.

+0

Cảm ơn những suy nghĩ. Tôi đã hy vọng sẽ có một cách để sử dụng một cơ chế tái chế trong hệ điều hành, và không phải quản lý tất cả những gì trong mã của riêng tôi ... nhưng tôi sẽ thực hiện một số nỗ lực với điều đó và xem nó hoạt động như thế nào. – Devunwired

+0

Có một cách để sử dụng một UITableViewController, xin vui lòng xem lại câu trả lời của tôi dưới đây –

0

Tôi đồng ý với một số ví dụ và mã nguồn.

Kính trọng

0

Có thể thêm UITableView theo chiều ngang không? Trong một hướng khác với màn hình. Sau đó, bạn có thể sử dụng ngữ nghĩa UITableView thông thường trong đó mỗi hàng là một hình ảnh cuộn theo chiều ngang thay vì theo chiều dọc.

-1

Tôi nghĩ rằng tôi có câu trả lời cho bạn Về di chuyển một UITableView ngang:

  1. tạo UIScrollView (và vô hiệu hóa cuộn dọc)
  2. chấm UITableView bên trong cuộn xem
  3. thay đổi chiều rộng xem bảng như bạn muốn và cập nhật UIScrollView.contentSize làm bảngXem chiều rộng
+0

Thêm một bảng xem không làm cho nó cuộn theo chiều ngang bất kể chiều rộng. – David

2

Đơn giản như appyling a Transform.

Đây là mã. Viết điều này trong bảng của bạnViewController init:

self.view.frame = CGRectMake(100,-5,250,350); //any Frame of your choice 
CGAffineTransform trans = self.view.transform; // get current transform (i.e. portrait) 
trans = CGAffineTransformRotate(trans, (M_PI/-2.0)); // rotate 90 degrees to go landscape 
self.view.transform = trans; // set current transform (landscape) 

Nhưng bây giờ những gì bạn cần nhận ra là trục của bạn cũng được hoán đổi. Bất kỳ thay đổi nào bạn thực hiện cho chiều cao sẽ thay đổi chiều rộng (và ngược lại) và mọi thay đổi được thực hiện cho origin.x sẽ thay đổi origin.y (và ngược lại)

+1

Bạn muốn "ví dụ" không "nghĩa là" - Từ [Wikipedia] (http://en.wikipedia.org/wiki/List_of_Latin_abbreviations): "ví dụ" là "exempli gratia" ("ví dụ", "ví dụ"); "tức là" là "id est" ("đó là", "nói cách khác") – Thromordyn

+0

Xin lỗi. Lỗi của tôi. Cảm ơn bạn đã sửa @Thromordyn –

0

Đăng câu trả lời cho chuỗi cũ này vì câu trả lời đã được xác thực không đúng. Bạn có thể sử dụng một UITableViewController và dequeueReusableCellWithIdentifier của nó được xây dựng trong các tính năng.

Bí quyết là làm cho việc xem bảng của bạn xoay và sau đó làm cho ô của bạn xoay theo hướng ngược lại.

trong viewDidLoad bạn sẽ thêm:

self.view.transform = CGAffineTransformMakeRotation(-M_PI_2); 

Và sau đó trong cellForRowAtIndexPath bạn sẽ sử dụng:

cell.containerView.transform = CGAffineTransformMakeRotation(M_PI_2); 

Hãy chắc chắn rằng tất cả các nội dung của di động của bạn sẽ được thêm vào một cái nhìn container (trong ví dụ này containersView) để bạn chỉ phải xoay vùng chứa chứ không phải mọi chế độ xem phụ của ô.

Cũng xin lưu ý rằng nó sẽ hoạt động tốt hơn với các ô có kích thước hình vuông, nếu không bạn có thể đấu tranh với chiều cao/chiều rộng tính toán.