2009-11-01 12 views
0

저는 Apple의 개발 사이트에있는 PageControl 프로젝트를 사용하고 있습니다. 플립 뷰를 프로젝트에 추가하고 정보 아이콘을 각 뷰/페이지의 오른쪽 위에 추가했습니다. 어떤 이유로 첫 페이지 만 뒤집기를 움직일 수 있습니다. 페이지 2는 여전히 뒤집힌 페이지를 보여 주지만 움직이지는 않습니다. 페이지 1에 대한 특별한 내용이 없는지 확인하려면 1 페이지와 2 페이지를 전환하면 제대로 작동합니다. 2 번 위치의 Page 1은 움직이지 않았지만 1 번 위치의 Page 2는 움직이지 않았습니다. 왜 이런 일이 일어날 지 또는 내가 어떻게 문제를 해결할 수 있는지에 대한 아이디어가 있습니까?왜 PageControl 프로젝트에 애니메이션이 없습니까?

나는이 문제를 다루는이 스레드를 살펴 보았습니다 : Flip View Iphone. 그러나 내 flipview UIViewController 및 정보 아이콘 가진 클래스입니다. 다른 스레드에서는 UIView를 사용하고 있습니다.

위의 스레드에서 showInfo 코드를 구현했습니다. 2 페이지에있을 때, 나는 플립이 보이지 않습니다. 그런 다음 1 페이지로 스크롤하여 뒤집힌 것을 봅니다. 페이지 2에 머물러 있지 않은 이유를 잘 모릅니다. 페이지 1에서는 플립에 애니메이션을 적용하지 않습니다. 플립 뷰가 갑자기 나타납니다.

답변

1

컨테이너 뷰가 있습니까? 거기에있을 수있는 뭔가 그래서 당신이 그것에 추가하고 하위 뷰를 제거 할 수 있습니까? 두 개의 viewController가있는 경우 애니메이션이 깨질 수 있습니다. 하나는오고 하나는 containerView가없는 것입니다. 나는 rootViewController를 사용하여 모든 내 페이지를 서로의 rootViewController와 서로간에 움직이게합니다. 여기에 내 코드를 뒤집기 위해 약간의 수정 작업을해야한다.

(self는 rootViewcontroller, 빈 뷰가있는 viewcontroller (색상은 일치하므로 색상이 일치한다.) 귀하의 견해))

- (void)switchTwoViews:(UIViewController *)view1 otherView:(UIViewController *)view2 
{ 
    /* 
    This method is called to switch views. 
    It flips the displayed view from the main view to the flipside view and vice-versa. 
    */ 

    UIViewController *coming = nil; 
    UIViewController *going = nil; 
    UIViewAnimationTransition transition; 

    [view1.view setUserInteractionEnabled: NO]; 
    [view2.view setUserInteractionEnabled: NO]; 
    if (view1.view.superview == nil) { 
     coming = view1; 
     going = view2; 
     transition = UIViewAnimationTransitionFlipFromLeft; 
    } 
    else { 
     coming = view2; 
     going = view1; 
     transition = UIViewAnimationTransitionFlipFromRight; 
    } 
     // in some cases the following is needed to size the view 
    // coming.view.frame = [UIScreen mainScreen].applicationFrame; 

    // going.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
    // coming.view.alpha = 0.0; 

    NSArray *viewArray = [[NSArray alloc] initWithObjects:coming, going, nil]; 
    [coming viewWillAppear:YES]; 
    [going viewWillDisappear:YES]; 
    [UIView beginAnimations:@"View Flip" context:viewArray]; { 
     [UIView setAnimationDuration:1.0]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationDidEnd:finished:context:)]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     //  coming.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
     //  going.view.alpha = 0.0; 

     [UIView setAnimationTransition:transition forView:self.view cache:YES]; 
     [self.view addSubview: coming.view]; 
    } 
    [UIView commitAnimations]; 

} 

- (void) animationDidEnd:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    NSArray *viewArray = context; 
    [((UIViewController *)[viewArray objectAtIndex:1]).view removeFromSuperview]; 
    [[viewArray objectAtIndex:1] viewDidDisappear:YES]; 
    [[viewArray objectAtIndex:0] viewDidAppear:YES]; 
    [[[viewArray objectAtIndex:0] view] setUserInteractionEnabled: YES]; 
    [viewArray release]; 
} 
+0

나는 부모보기로 돌아올 때를 제외하고는 지금 내리고 있습니다. 플립보기 [self.view removeFromSuperview]에서이 작업을 수행합니다. 반면 당신은 이것을하고있다 [self.view addSubview : coming.view]. 내 코드로 인해 부모에게 반환 될 때 애니메이션이 적용되지 않습니다. – 4thSpace

+0

내 뒤집힌보기가 사라지기 때문에 나는 또한 animationDidEnd : code를 사용할 수 없습니다. – 4thSpace

+0

BeginAnimation을 호출하고 animationDidEnd를 호출하지 않은 경우 beginAnimation 이후의 호출은 대기 상태가되어 아직 실행되지 않았습니다. 일을 떠나기에 좋은 상태가 아닙니다. 보기를 뒤집을 때 하나의보기가 추가되고 다른보기가 제거됩니다. 이 코드를 제거하지 않으면 뷰 뒤에 남게되고 적어도 위 코드를 사용하면 문제가 다시 발생합니다. 당신이 무슨 일이 일어나는지 알 때까지이 루틴을 계속 놀아 라. 일단 마스터하면 다른 방법으로도 할 수 있습니다. – mahboudz

관련 문제