처음으로 기본적인 Objective-C 및 iOS 개발을 배우기 때문에 나와 함께하시기 바랍니다. 나는 다른 언어의 lambdas 개념에 대해 매우 잘 알고 있지만 Objective-C 블록을 사용한 것은 이번이 처음이다.animateWithDuration은 애니메이션을 적용 할 대상을 어떻게 알 수 있습니까?
그래서 UIKit 애니메이션 자습서에 따라 배경색을 애니메이션으로 적용하여 확장한다고 생각했습니다.
- (void) setBG: (float)r g:(float)g b:(float)b duration:(float)secs
{
[UIView animateWithDuration:secs delay:0.0 options:0
animations:^{
[self setBackgroundColor: [UIColor colorWithRed:r green:g blue:b alpha:1.0]];
}
completion:nil];
}
그래서, 변수의 애니메이션이 필요 무엇 animateWithDuration
에게 어떻게 든해야 할 것으로 예상 :이 썼다. 나는 위치 (그래서 x와 y)를 움직이는 예제에서 이것을 시작했고 3 개의 변수를 움직이기 위해 약간의 변경을해야한다고 생각했다.
그러나 놀랍게도,이 "그냥 효과가 있습니다." 어쨌든 언어가 자동으로 r
, g
및 b
에 애니메이션을 적용하려고한다고 판단한 것 같습니다. 컴파일러가 블록을 실제로 내관합니까? 여기서 무슨 일이 일어나고있는거야? animateWithDuration
은 시간이 지남에 따라 수정할 변수를 어떻게 알 수 있습니까? 사전에
감사합니다.
흠, 블록에 NSLog 문을 추가했는데 한 번만 인쇄됩니다. 이 말은 setBackgroundColor가 한 번 호출되었지만 값을 애니메이션화하기 위해 특별히 작성된 것일 수도 있다는 것을 알 수 있습니다. animateWithDuration은 어떻게 든 배경색 애니메이터에 "지속 시간"값을 전송합니다. – Steve