2012-11-28 5 views
0

UIView 애니메이션을 사용하기 시작했습니다. 그런 코드가 제대로 작동하지 못합니다. 여기 내가 무엇입니까UIView 애니메이션 숨기기 및 표시

if(_Language.hidden == true) 
{ 
    [UIView animateWithDuration:1.0 
          delay:0.0 
         options:UIViewAnimationCurveEaseInOut 
        animations:^ { 
         _Language.alpha = 1.0; 
        } 
        completion:^(BOOL finished) { 
         _Language.hidden = false; 
        }]; 
} 
else 
{ 
    [UIView animateWithDuration:1.0 
          delay:0.0 
         options:UIViewAnimationCurveEaseInOut 
        animations:^ { 
         _Language.alpha = 0.0; 
        } 
        completion:^(BOOL finished) { 
         _Language.hidden = true; 
        }]; 
} 

이 코드는 이러한 방식으로 작동합니다. 숨기기 애니메이션이 예상대로 작동합니다. 하지만 쇼 애니메이션은 1 초를 기다리고 전환없이 오브젝트를 팝합니다. 아무도 내가 여기에없는 것을 말해 줄 수 있습니까?

답변

9

여러분은 애니메이션이 끝난 후에 만 ​​true로 hidden 속성을 변경, 그래서 애니메이션이 완료 될 때까지 나타나지 않습니다. 애니메이션이 시작되기 전에 다음 작업을 수행해야합니다.

if(_Language.hidden == true) 
{ 
_Language.hidden = false; 
[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationCurveEaseInOut 
       animations:^ { 
        _Language.alpha = 1.0; 
       }]; 
} 
+0

어리석은 .. 그게 효과가 있었어. 그러나 이제 또 다른 문제가 발생했습니다. 보기 didload에서 _language.hidden = true를 가져야합니다. 처음부터 숨김으로써. 첫 번째 애니메이션을 제대로 얻지 못하면 즉시 표시됩니다. 그 후 모든 것이 예상대로 작동합니다. 아이디어? – Datenshi

+0

viewdidload의 알파를 0으로 설정하여 작동 시켰습니다. 답변 해 주셔서 감사합니다! – Datenshi

+0

http://stackoverflow.com/a/29080894/1442541 – evya

5

_Language.hiddentrue으로 설정되어 있기 때문에 애니메이션으로 처리 할 때 아무 것도 화면에 표시되지 않습니다. 애니메이션으로 만들기 전에 표시해야합니다. hidden 속성을 false로 설정하고 애니메이션을 표시합니다. 역순은 완료 블록에 추가 할 때 숨기기 위해서만 작동합니다.

_Language.hidden = false; 
[UIView animateWithDuration:1.0 ... 

및 완료 블록에서 제거

completion:^(BOOL finished) { 
        }]; 
+0

답변 해 주셔서 감사합니다.하지만 @shannoga 답변을 수락하겠습니다. 그가 3 초 만에 더 빨랐던 것에 따라 :) – Datenshi

+1

나는 10 초 정도 빨랐다. :) 가장 오래된 탭으로 정렬을 클릭하여 확인할 수 있습니다 (수락 한 후 표시하지 않음). 어쨌든 괜찮습니다. 그것은 도움이 된 것을 기쁘게 생각합니다. – iDev