2015-04-02 16 views
5

Tôi đang phát triển một ứng dụng iOS có trong một chế độ xem là UITableView với hai tùy chỉnh UITableViewCell. Tất cả điều này bằng cách sử dụng bảng phân cảnh chính.

Mọi thứ hoạt động khá tốt. Nhưng những gì tôi cần thực hiện là một hình ảnh mờ dần trong/mờ dần trong một UIView từ chỉ một ô.

Hiện nay tôi đang sử dụng một đoạn mã này để animate xem:Hoạt ảnh UIView bên trong UITableViewCell

[UIView animateWithDuration:1.2 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^{ 

         self.myView.alpha = 0; 

        } completion:^(BOOL finished) { 

         self.myView.alpha = 1; 

        }]; 

Trong một phương pháp "đặt nội dung" mà tôi gọi là trong phương pháp nguồn tableView:cellForRowAtIndexPath: dữ liệu của UITableView.

Hoạt ảnh hoạt động ok. Ngay cả khi thay đổi giữa chế độ xem, chế độ xem vẫn hoạt ảnh. Vấn đề của tôi là khi tôi tải lại dữ liệu từ chế độ xem bảng hoặc chế độ xem bảng cuộn lên hoặc xuống cho đến khi ô có hoạt ảnh biến mất và phải sử dụng lại ô để hiển thị lại, trong thời điểm đó ô được hiển thị không có hoạt ảnh.

Tôi đang thiếu gì ở đây? Có cách nào tốt hơn để thực hiện điều này? Làm cách nào để khởi động lại hoạt ảnh sau khi xem bảng sử dụng lại ô?

Tôi nghĩ điều quan trọng cần lưu ý là theo thiết kế giao diện người dùng của tôi, chỉ một ô sẽ có hoạt ảnh.

Cảm ơn.

Trả lời

12

Tôi nghĩ rằng bạn nên thực hiện thêm một delegate phương pháp UITableView, đó là -

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

& thực hiện hình ảnh động của bạn trên quan điểm tương ứng của các tế bào tương ứng bên trong nó.

Các phương pháp dưới đây sẽ được gọi mỗi khi tế bào được hiển thị, (cũng trong trường hợp nếu nó đi ra khỏi khung của TableView quay trở lại với vùng hiển thị)

-(void) tableView:(UITableView *) tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //row number on which you want to animate your view 
    //row number could be either 0 or 1 as you are creating two cells 
    //suppose you want to animate view on cell at 0 index 
    if(indexPath.row == 0) //check for the 0th index cell 
    { 
     // access the view which you want to animate from it's tag 
     UIView *myView = [cell.contentView viewWithTag:MY_VIEW_TAG]; 

     // apply animation on the accessed view 
     [UIView animateWithDuration:1.2 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^ 
     { 
        [myView setAlpha:0.0]; 
     } completion:^(BOOL finished) 
     { 
        [myView setAlpha:1.0]; 
     }]; 
    } 
} 
+0

Yeah, tha đã giúp rất nhiều, cảm ơn!. Nhưng vẫn không hoạt động trong một số trường hợp khác như phương thức 'reloadData'. Nhờ phản hồi của bạn và cũng sử dụng phương thức 'tableView: didEndDisplayingCell: forRowAtIndexPath:' để dừng hoạt ảnh vì có vẻ như nó cũng gây ra sự cố. –

+0

Trong willDisplayCell: nếu bạn đang làm hoạt hình chế độ xem trong 1,2 giây sau khi thời lượng này là trên hoạt ảnh sẽ tự động dừng, thực sự tôi không hiểu việc sử dụng phương thức tableView: didEndDisplayingCell: forRowAtIndexPath:. Tôi cần phải biết sử dụng nó, bạn có thể vui lòng elobrate một chút về nó, cảm ơn. –

+0

Tôi đang sử dụng nó để xóa hoạt ảnh khỏi chế độ xem vì tôi nhận ra rằng nếu hoạt ảnh bị gián đoạn, nó sẽ không bắt đầu lại. –

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