developer tip

UITableview reloaddata with animation

copycodes 2020. 11. 9. 08:13
반응형

UITableview reloaddata with animation


배열 및 드롭 다운 목록에서 채워진 UItableview가 있습니다. 드롭 다운 목록의 행을 선택하면 배열이 새 값으로 삽입되고 tableview가 다시로드됩니다. 새 배열 내용으로 tableview를 애니메이션하는 방법은 무엇입니까? 미리 감사드립니다

행을 하나씩 보여주고 싶은 애니메이션. 나는이 방법을 시도했다

- (void)reloadRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation { 
NSIndexPath rowToReload = [NSIndexPath indexPathForRow:[names count] inSection:0];
 NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
[tableDetails reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
 }

정답을 추가하려면 모든 섹션 을 다시로드 UITableView하려면 다음을 수행해야합니다.

ObjC

NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];

빠른

let range = NSMakeRange(0, self.tableView.numberOfSections)  
let sections = NSIndexSet(indexesIn: range)               
self.tableView.reloadSections(sections as IndexSet, with: .automatic) 

애니메이션과 함께 테이블 뷰의 모든 것을 다시로드합니다. 보스처럼.


이 방법을 사용하십시오.

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

스위프트 3

UIView.transition(with: myTableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

스위프트 2

UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

나는 이것을 Swift로 갔다.


먼저 tableView에 beginUpdates. 그런 다음 관련 섹션을 업데이트하십시오 (tableView에 섹션이 하나만있는 경우 섹션 번호로 0을 전달하십시오). 여기에서 애니메이션을 지정합니다. 원하는 효과를 얻기 위해 함께 놀 수 있습니다. 그 후 endUpdatestableView 를 호출 합니다. UITableViewRowAnimation의 typedef는 다음을 지정합니다.

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle,
   UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;

원하는 것을 확인하기 위해 놀아보십시오. 선택조차도 UITableViewRowAnimationNone때때로 좋은 효과를 가질 수 있습니다. 아래 테이블 업데이트 코드 :

    [self.tableView beginUpdates];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];

Swift 3에서는 다음 extension간단히 추가 할 수 있습니다 UITableView.

extension UITableView {
    func reloadData(with animation: UITableView.RowAnimation) {
        reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation)
    }
}

reloadSections:withRowAnimation:기능 을 사용할 수 있습니다 . UITableView 클래스 참조를 확인하십시오 .

이미 질문에 답한 애니메이션 으로이 reloadData를 확인하십시오 .


아래 방법은 애니메이션을 위해 tableView에서 지원됩니다.

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

사용법 :

//Reload tableView with animation
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight]; 

사용 가능한 다양한 유형의 애니메이션은 다음과 같습니다.

typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,           // slide in from right (or out to right)
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,            // available in iOS 3.0
UITableViewRowAnimationMiddle,          // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy
UITableViewRowAnimationAutomatic = 100  // available in iOS 5.0.  chooses an appropriate animation style for you    };

이것이 도움이되기를 바랍니다!


나는 이것을 시도했고 나의 Table것은 Animated부드러운 애니메이션으로

// 테이블 뷰를 다시로드 할 위치에이 코드를 넣습니다.

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView transitionWithView:<"TableName"> 
                      duration:0.1f 
                       options:UIViewAnimationOptionTransitionFlipFromRight 
                    animations:^(void) {
                        [<"TableName"> reloadData];
                    } completion:NULL];        
});

UITableView를 다시로드하는 동안 뷰의 전환 변경 동안 애니메이션을 시도합니다.

[UIView transitionWithView:_yourTableView 
                  duration:0.40f 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^(void) {[_yourTableView reloadData];}  
                completion:nil];

참고 URL : https://stackoverflow.com/questions/14576921/uitableview-reloaddata-with-animation

반응형