2013-08-23 2 views
1

여기에 작동하는 이상한 사실 :UIView의 애니메이션은 한 번만

내가 애니메이션 (이미지 이동)를 보유하고있는 사용자 정의있는 UITableViewCell 있습니다.

셀을 만들면 올바르게 작동합니다.

그러나 일단 셀을 숨기고 다시 스크롤하면 애니메이션이 중지되었습니다. 그건 이해할 수 있습니다. 하지만 내 viewWillAppear에서도 내 애니메이션 메서드를 호출하고 있습니다. 그리고 유선 부분은 메서드가 호출되고 중단 점을 넣었습니다. 아무 것도 할당 해제되지 않았습니다 ...

내 UITableViewCell이 강력하게 유지됩니다 (음악 플레이어가 있고 음악이 계속 재생 됨). 나는 정말로 그것을 얻지 않는다.

@property (nonatomic, strong) DWPlayerCellVC *playerView; 


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"player"]; 

     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"player"]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     } 

     NSArray *viewsToRemove = [cell.contentView subviews]; 
     for (UIView *v in viewsToRemove) { 
      [v removeFromSuperview]; 
     } 

     if(!self.playerView){ 
      self.playerView = [[DWPlayerCellVC alloc] init]; 
     } 

     [cell.contentView addSubview:self.playerView.view]; 

     self.playerView.model = self.model[indexPath.row]; 


     return cell; 

DWPlayerCellVC :

@implementation DWPlayerCellVC 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self zoomIn]; 
} 

- (void)setModel:(id)model 
{ 
    _model = model; 
    // ... 
    [self zoomIn]; 

} 

- (void)zoomIn 
{ 
    UIViewAnimationOptions options = 
    UIViewAnimationOptionBeginFromCurrentState | 
    UIViewAnimationOptionCurveEaseInOut | 
    UIViewAnimationOptionRepeat | 
    UIViewAnimationOptionAutoreverse; 

    [UIView 
    animateWithDuration:10.f 
    delay:0.f 
    options:options 
    animations:^{ 
     CGFloat scale = 1.4f; 
     self.imageCoverView.transform = CGAffineTransformMakeScale(scale, scale); 
    } completion:NULL]; 
} 

당신은 어떤 아이디어가 있다면 ...

덕분에 많은

여기 내 코드입니다!

답변

0

UITableViewCell은 이전 상태를 기억합니다. 대기열에 넣을 때 (보기 밖으로 스크롤 할 때) 원래 상태로 되돌아 가지 않습니다. ZoomIn 메서드를 호출하면 다시 확대되는 것이지만 이 이미 확대 된이므로 확대 할 수 없다고 생각합니다.

시도해보기 - 확대하기 전에 축소되었는지 확인하십시오. 따라서 ViewWillAppear에서 Cell의 빠른 "Reset"으로 이동 한 다음 zoomIn을 호출하고 문제가 해결되는지 확인합니다.

+0

것은 무한한 애니메이션 (UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)이므로 영원히 확대/축소한다고 가정합니다. 그리고 그것은 처음으로 무엇을합니까? –

1

zoomInsetModel에 의해서만 호출되기 때문에 문제가되는 것 같습니다. 이는 UITabelViewCellsUIViewControllers으로 표시되도록 관리되지 않으므로 viewWillAppear:이 호출되지 않기 때문입니다.

내가 생각할 수있는 두 가지 옵션이 있습니다.

먼저 루트보기 컨트롤러를 포함보기 컨트롤러로 설정하고 DWPlayerCellVCchildViewController으로 추가합니다. 이 옵션은 모든 작업을 수행하기위한 몇 가지 작업을 필요로하며, 작동시키기 위해 필요한 덤프를 보려면 Creating Custom Container View Controllers을 읽는 것이 좋습니다.

두 번째 (그리고 내가 사용하는 것)는 애니메이션 실행을 처리하는 UITableViewCell 하위 클래스를 만드는 것입니다. 그런 다음 prepareForReuse 메서드를 구현하여 애니메이션을 다시 시작할 수 있습니다. 이 메서드는 dequeueReusableCellWithIdentifier:을 사용할 때 셀에서 자동으로 호출됩니다.

+0

viewWillAppear :에 중단 점을 넣었습니다. 그리고 zoomIn에서 2 개의 메서드가 호출되었습니다. 그것은 이상한 부분입니다! : / –