2013-05-11 3 views
3

내 앱은 사용자가 선택한 선택에 따라 계산 및 애니메이션을 수행해야하며 애니메이션에 사용되기 전에 UILabel을 업데이트해야합니다. 문제는 애니메이션을 엉망으로 만들 때마다 UILabel 텍스트를 설정하면됩니다. 이유는 모르겠다. 나는 [self.view.layer removeAllAnimations]를 시도했다. 변경하기 전에 UILabel 텍스트는 여전히 좋지 않습니다. 프로그래밍 방식으로 IBAction을 호출하고 해당 블록에서 UILabel 텍스트를 변경하려고 시도했지만 여전히 애니메이션이 망가져 있습니다. 아무것도 작동하지 않는 것 같아요. 그리고 확실히 타이밍에 관한 것입니다. 왜냐하면 viewDidLoad의 UILabel 텍스트가 올바르게 작동하기 때문입니다. 또한 애니메이션 전에 다른 UILabel의 텍스트를 변경하여 스토리 보드 문제인지 확인하고 같은 문제가 발생합니다. 전혀 여기에 도움이 애니메이션 코드 경우 : UILabel 텍스트 변경, "분열" "빼기"와 "곱하기", "추가"원인이 경우UILabel 텍스트를 변경하면 애니메이션이 엉망이됩니까?

-(IBAction) swipeDown:(UISwipeGestureRecognizer *)recognizer{ 
multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
subtract.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
add.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
divide.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
signcircle.frame = CGRectMake(145.0f, 70.0f, signcircle.frame.size.width,signcircle.frame.size.height); 
sign.frame = CGRectMake(152.0f, 68.0f, sign.frame.size.width,sign.frame.size.height); 
[email protected]"multiply"; 
if(fivebutton.highlighted){ 
    circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
    multiply.transform = CGAffineTransformMakeScale(1.35f, 1.35f); 
    multiply.frame = CGRectMake(120.0f, 248.0f, multiply.frame.size.width, multiply.frame.size.height); 
    [UIView animateWithDuration:.25f animations:^{ 
     add.frame = CGRectMake(130.0f, 202.0f, add.frame.size.width, add.frame.size.height); 
     add.alpha=1.0; 
     subtract.frame = CGRectMake(82.0f, 255.0f, subtract.frame.size.width, subtract.frame.size.height); 
     subtract.alpha=1.0; 
     divide.frame = CGRectMake(178.0f, 255.0f, divide.frame.size.width, divide.frame.size.height); 
     divide.alpha=1.0; 
     multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
     multiply.frame = CGRectMake(130.0f, 305.0f, multiply.frame.size.width, divide.frame.size.height); 
     multiply.alpha=1.0; 
     circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
     circle.alpha=1.0; 
    UIImage *downimage = [UIImage imageNamed: @"multiplydown.png"]; 
    [multiply setImage:downimage]; 
    onebutton.alpha=0.1; 
    one.alpha=0.1; 
    twobutton.alpha=0.1; 
    two.alpha=0.1; 
    threebutton.alpha=0.1; 
    three.alpha=0.1; 
    fourbutton.alpha=0.1; 
    four.alpha=0.1; 
    sixbutton.alpha=0.1; 
    six.alpha=0.1; 
    fivebutton.alpha=0.0; 
    sevenbutton.alpha=0.1; 
    seven.alpha=0.1; 
    eightbutton.alpha=0.1; 
    eight.alpha=0.1; 
    ninebutton.alpha=0.1; 
    nine.alpha=0.1; 
    zerobutton.alpha=0.1; 
    zero.alpha=0.1; 
    decimalbutton.alpha=0.1; 
    decimal.alpha=0.1; 
    equalsbutton.alpha=0.1; 
    equals.alpha=0.1; 
    }]; 
    [UIView commitAnimations]; 
} 

(UIImageView 's이 (가)) 대신 함께 병합 애니메이션이 펼쳐질 것으로 예상됩니다. 이 위쪽으로 이동하지 않도록 "VAR1"및 "VAR2"(UILabel 년대)을 발생이 경우

-(void) fiveTapEnded{ 
var2.hidden=NO; 
if ([type isEqual:@"add"]) { 
    NSLog(@"Is add"); 
} 
if ([type isEqual:@"subtract"]) { 
    NSLog(@"Is subtract"); 
} 
if ([type isEqual:@"multiply"]) { 
    var1.textAlignment = NSTextAlignmentRight; 
    var1.frame = CGRectMake(40.0f, 70.0f, var1.frame.size.width,var1.frame.size.height); 
    var2.frame = CGRectMake(145.0f, 70.0f, var2.frame.size.width,var2.frame.size.height); 
    [UIView animateWithDuration:.25f animations:^{ 
     add.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
     add.alpha=0.0; 
     multiply.transform = CGAffineTransformMakeScale(1.5f, 1.5f); 
     multiply.alpha=0.0; 
     divide.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
     divide.alpha=0.0; 
     circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
     circle.alpha=0.0; 
     subtract.alpha=0.0; 
     var1.frame = CGRectMake(0.0f, 20.0f, var1.frame.size.width,var1.frame.size.height); 
     var2.frame = CGRectMake(185.0f, 20.0f, var2.frame.size.width,var2.frame.size.height); 
     signcircle.frame = CGRectMake(145.0f, 30.0f, signcircle.frame.size.width,signcircle.frame.size.height); 
     sign.frame = CGRectMake(152.0f, 26.5f, sign.frame.size.width,sign.frame.size.height); 
     result.frame = CGRectMake(8.0f, 100.0f, result.frame.size.width,result.frame.size.height); 
     signcircle.alpha=1.0; 
     sign.alpha=1.0; 
     var2.alpha=1.0; 
     result.alpha=1.0; 
     one.alpha=1.0; 
     onebutton.alpha=1.0; 
     twobutton.alpha=1.0; 
     two.alpha=1.0; 
     three.alpha=1.0; 
     threebutton.alpha=1.0; 
     fourbutton.alpha=1.0; 
     four.alpha=1.0; 
     sixbutton.alpha=1.0; 
     six.alpha=1.0; 
     five.alpha=1.0; 
      fivebutton.alpha=1.0;; 
     sevenbutton.alpha=1.0; 
     seven.alpha=1.0; 
     eightbutton.alpha=1.0; 
     eight.alpha=1.0; 
     ninebutton.alpha=1.0; 
     nine.alpha=1.0; 
     zerobutton.alpha=1.0; 
     zero.alpha=1.0; 
     decimalbutton.alpha=1.0; 
     decimal.alpha=1.0; 
     equalsbutton.alpha=1.0; 
     equals.alpha=1.0; 
     }]; 
    [self.view.layer removeAllAnimations]; 
    [self functionToBeCalled:self]; 
} 
if ([type isEqual:@"divide"]) { 
    NSLog(@"Is divide"); 
} 
} 

.

저는 혼란 스럽다고 생각합니다. 나는 모든 곳을 검색해 왔기 때문에 비슷한 해결책을 찾지 못했습니다. 누군가가 해결책이나 조언을 주시면 대단히 감사하겠습니다.

답변

1

"엉망진창 애니메이션"이란 말은 시작 위치로 돌아 간다는 뜻이며, 자동 레이아웃을 설정했을 수도 있습니다. 자동 배열 제약 조건은 UILabel을 변경할 때 자동으로 다시 적용되므로 프레임 변경을 수반하는 애니메이션이 취소됩니다. 레이아웃을 제약하는 자동 레이아웃을 사용하는 경우 frame 또는 center 값을 수동으로 변경하면 안됩니다. 분명히 두 가지 구제 잎

:

  1. 간단한, 당신은 자동 레이아웃을 해제 할 수 있습니다. 그런 다음 레이블 설정은 적용될 제한 조건을 트리거하지 않습니다. 매우 비슷한 문제는 NSTimer blocks other animations을 참조하십시오.

  2. 당신이 자동 레이아웃을 유지하려면

    그런 다음 컨트롤의 frame (또는 center) 등록 정보를 변경하여 애니메이션되어서는 안되며, 오히려 당신이 그들을 애니메이션 후 적절한 제약 IBOutlet 참조를 작성해야하고, 켜져 constant 속성을 변경하여 Animating an image view to slide upwards

관련 문제