2012-04-23 46 views
11

Tôi đang cố gắng tạo hiệu ứng cho việc xóa nội dung đầu trang/chân trang của bảng nhìn bằng hoạt ảnh. Tôi tin rằng tôi có thể gọi hoặc removeFromSuperview trên nội dung tiêu đề chính nó, hoặc chỉ cần chỉ định tiêu đề để nil, nhưng tôi không biết làm thế nào để animate này. Một khối hoạt hình đơn giản không làm bất cứ điều gì - làm thế nào để làm mờ một cái nhìn (một nhãn trong trường hợp này) vào/ra?Làm nổi bật đầu trang và chân trang của UITableView

+0

Bạn đang sử dụng phiên bản UITableViewController, UITableViewDelegate hoặc UITableViewDataSource hoặc một số lớp trình điều khiển chế độ xem khác? Nếu bạn đang sử dụng một UITableViewDataSource, bạn nên sử dụng tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) phần để pragmatically loại bỏ tiêu đề và tableView: (UITableView *) tableView titleForFooterInSection: (NSInteger) phần để loại bỏ footers lập trình. –

+0

Tôi đang sử dụng bộ điều khiển xem bảng. Chỉ cần làm rõ, tôi muốn làm mờ khung nhìn tiêu đề của bảng, không phải tiêu đề của phần –

Trả lời

24

Tôi đã viết một ví dụ về cách xóa hoàn toàn chế độ xem tiêu đề bằng cách sử dụng các khối hoạt ảnh.

[UIView beginAnimations:nil context:NULL]; 
[self.tableView setTableHeaderView:nil]; 
[UIView commitAnimations]; 

Điều này tất nhiên giả định rằng hoạt ảnh này đang được gọi bên trong lớp UITableViewController của bạn.

Đơn giản chỉ cần xóa chế độ xem tiêu đề khỏi trình giám sát không hoạt động vì chế độ xem bảng không biết tự thay đổi kích thước để lấp đầy thứ được sử dụng làm chế độ xem tiêu đề. Cài đặt của chế độ xem tiêu đề làm cho chế độ xem bảng tự làm mới động.

Nếu cách này không hiệu quả, hãy kiểm tra (các) bài tập của bạn trong cá thể tableView.

1

tôi thấy hai tùy chọn sau để cả hai công việc ok:

tùy chọn 1

[UIView animateWithDuration:0.15 
         delay:0.0 
     options: UIViewAnimationCurveEaseOut 
       animations:^{deleteLabel.alpha = 0;} 
      completion:nil]; 

tùy chọn 2

[UIView beginAnimations:nil context:nil]; 
deleteLabel.alpha = 0.0; 
[UIView commitAnimations]; 
+2

Chỉ là một lưu ý nhỏ cho bất kỳ ai theo dõi điều này, tùy chọn ở trên phải là UIViewAnimationOptionCurveEaseOut –

0

Đây là công việc một cách hoàn hảo "nguyên trạng", và tôi không quan tâm đến hoạt ảnh

[myPrettyViewControllerInstance letUpdatePrettyViewNow]; 
    [[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:[myPrettyViewControllerInstance view]]; 
    [[self tableView] endUpdates]; 

nhưng nếu chúng ta không cần nó hơn

[[self tableView] setTableHeaderView:nil]; 

thats tất cả của chúng ta cần, thực sự (nếu nó không fadeOut - kiểm tra các điều kiện của

[[self tableView] setTableHeaderView:nil]; 

và chúng tôi không cần

[UIView beginAnimations:nil context:NULL]; 
    [[self tableView] setTableHeaderView:nil]; 
    [UIView commitAnimations]; 

nop

[[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:nil]; 
    [[self tableView] endUpdates]; 

nop

[[self tableView] setTableHeaderView:nil]; 
    [[self tableView] reloadData]; 

noo ..

+0

Điều này làm việc cho các ô, nhưng không, có vẻ như đối với các tiêu đề bảng. – Gujamin

+0

Xin lỗi, nhưng nó hoạt động cho các tiêu đề (không biết về các ô). Tôi sử dụng điều này trong dự án gần đây của tôi và tất cả đều hoạt động. Bạn có thể cung cấp mã nguồn không? – WINSergey

+0

Nó không hoạt động để chèn chế độ xem tiêu đề bảng. Sử dụng bảng phân cảnh và bố cục tự động. Chế độ xem vừa xuất hiện. Nó không hoạt hình. – Gujamin

8

tôi đã kết thúc với giải pháp đơn giản sau đây. Nó làm động việc loại bỏ tiêu đề.

[self.tableView beginUpdates]; 
self.tableView.tableHeaderView = nil; 
[self.tableView endUpdates]; 

Tôi nhận thấy điều này được đề cập trong phản hồi của WINSergey, nhưng tôi thấy giải thích của anh ấy hơi khó hiểu.

1

tôi đã cùng một vấn đề, tôi muốn kiểm soát cách header được lấy ra, đây là phương pháp của tôi:

Tại viewDidLoad:

UIView *transView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 320.f, 200.f)]; 
transView.backgroundColor = [UIColor clearColor]; 
self.headerView = transView; 
[transView release]; 

[self.tableView setTableHeaderView:self.headerView]; 

Sau đó, khi bạn cần phải loại bỏ tiêu đề:

[UIView animateWithDuration:.3f 
         delay:.0f 
        options: UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        self.headerView.frame = CGRectMake(0.0f, 0.0f, 320.f, 0.0f); 
       } 
       completion:^(BOOL finished) { 
         [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
       }]; 
0

Tôi phải đặt 2 hoạt ảnh để hoạt động.

[UIView animateWithDuration:2.0f animations:^{ 
     mylbl.alpha = 0.1 ; 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:2.0f animations:^{ 
      mylbl.alpha = 1.0 ; 
     }]; 
    }]; 
Các vấn đề liên quan