block 매개 변수로 전달
block
우리는 이전에 우리의 Block에 대해 이야기한 적이 있는데, 지금 우리는 다시 그를 꺼내서 다시 한 번 이야기해야 한다. 단지 이번에 우리는 Block에 관한 지식을 더욱 깊이 있게 설명할 것이다.
Block 검토
우리가 잘 아는 것은 바로 Block의 용법이다. 코드를 저장하는 것이다.
그리고 돌이켜보면 Block의 생성 방법과 호출 방법을 살펴보겠습니다. (아래 코드는viewDidLoad에 적혀 있습니다.)// block
// void:
// (^blockName): block
// () : block
// ^{}: block
void(^blockName)() = ^{
NSLog(@"SB");
NSLog(@"SB");
NSLog(@"SB");
};
Block 호출 방법:blockName();
인쇄:
** 2016-04-21 22:28:47.588 block[716:146584] SB 2016-04-21 22:28:47.589 block[716:146584] SB 2016-04-21 22:28:47.589 block[716:146584] SB **
Block을 만드는 단축키: inline Block을 직접 적으세요. 그러면 Block을 쉽게 만들 수 있습니다.(^)() = ^() {
};
새로운 지식:
우리 Block도 사실 하나의 유형이다. 예를 들어 우리 int 형식, 더블 형식과 같다.
int 형식을 정의할 때 다음과 같습니다. int a = 0;
그럼 우리 Block은 어떻게 정의해야 하나요???
사실 우리가 typedef Block () 코드를 다 쓴 후에도 그는 다음과 같은 효과가 나타난다고 알릴 것이다.typedef (^)();
우리는 Block:typedef viod(^myBlock)();
그리고 Block을 만들 때 이렇게 할 수 있습니다. (int 형식의 생성과 유사합니다.)myBlock blockName = ^{
NSLog(@"SB");
NSLog(@"SB");
NSLog(@"SB");
};
우리가 호출할 때도 위와 같다.
모두들 이렇게 하는 것이 매우 지루하다고 생각하지 않습니까? 우리가 먼저 인쇄를 하거나 어떤 일을 하려면 코드를 직접 쓰면 끝이지 않습니까? Block을 왜 씁니까?
확실히 위의 코드는 여러분께 Block의 기본적인 역할을 보여 드릴 뿐입니다. 이제 Block의 기능을 말씀드리겠습니다.
Block이 매개 변수로 전달됨
예: 컨트롤 애니메이션 재생
우리는 모두 애니메이션의 재생에 대해 잘 알고 있다. 우리는 Block을 이용한다.
// block
// void:
// (^blockName): block
// () : block
// ^{}: block
void(^blockName)() = ^{
NSLog(@"SB");
NSLog(@"SB");
NSLog(@"SB");
};
blockName();
(^)() = ^() {
};
int a = 0;
typedef (^)();
typedef viod(^myBlock)();
myBlock blockName = ^{
NSLog(@"SB");
NSLog(@"SB");
NSLog(@"SB");
};
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[UIView animateWithDuration:1.0 animations:^{
//
self.SBView.center = CGPointMake(100, 400);
} completion:^(BOOL finished) {
//
}];
}
이 방법은 바로 우리가 SBView를 눌렀을 때 그가 이 방법 위의 실행 애니메이션을 실행할 것이다. 시간은 1초이다.
** 다음은 이 방법에 따라 자신만의 실행 애니메이션을 쓰는 방법입니다.**
사실 개발에서 Block은 방법의 매개 변수로 전달되었는데, 오늘날 이 사용자 정의 애니메이션 방법을 이용하여 Block이 어떻게 방법의 매개 변수로 전달되었는지 이해하고자 한다.
먼저, 우리 시스템에서 우리 위의 방법에 대해 심층적인 것은 몇 줄의 코드이다.
[UIView beginAnimations: nil context: nil];
//
[UIView setAnimationDuration: 0.5];
[UIView setAnimationDidStopSelector:@seletor(stop)];
self.SBView.center = CGPointMake(100, 400);
[UIView commitAnimations];
-(void)stop{
NSLog(@" ");
}
**알겠습니다. 시스템은 실제로 그 방법을 호출했습니다. 다음은 저희가 정의한 애니메이션 방법을 시작합니다.**
// , :
- (void)myAnimateWithDuration:(CGFloat)duration animations:(void(^)())animation completion:(void(^)())completion {
[UIView beginAnimations: nil context: nil];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationDidStopSelector:@seletor(stop)];
animation();
self.SBView.center = CGPointMake(100, 400);
[UIView commitAnimations];
}
-(void)stop{
NSLog(@" ");
}
우선, 우리는 다음과 같은 것을 고려해야 한다.
이 Block이 호출된 위치:
animation();
에서 집행한그래서 해결 방법:
우리들의completion을 공공 속성으로 만들다
@property (nonatomic, copy) void(^completion)();
그리고 우리가 정의한 방법에서 우리의 공공 속성에 값을 부여합니다. (이 방법의completion을 우리의 공공 속성에 부여합니다.)
self.completion = completion;
구체적인 위치는 잠시 후에 코드를 직접 쓰겠습니다
마지막:stop 방법에서 우리completion을 실행합니다
-(void)stop{
self.completion();
}
이렇게 하면 사용자 정의 애니메이션 재생이 완료됩니다.
- (void)myAnimateWithDuration:(CGFloat)duration animations:(void(^)())animation completion:(void(^)())completion {
[UIView beginAnimations: nil context: nil];
[UIView setAnimationDuration: duration];
[UIView setAnimationDidStopSelector:@seletor(stop)];
self.completion = completion;
animation();
self.SBView.center = CGPointMake(100, 400);
[UIView commitAnimations];
만약 아직도 잘 모르겠다면, 내가 여기에서 인터넷에서 찾은 사진 한 장을 여러분께 보여 드리겠습니다.
Snip20160422_1.png
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.