SKScene에서 ViewController의 메서드를 호출하는 방법
-
20-12-2019 - |
문제
ViewController.h에 - (void)showFullScreenAd라는 메서드를 만들었습니다.
나는 그것을 내 장면 안에서 부르려고 노력했다.[self.view.window.rootController showFullScreenAd]를 시도했습니다.이 방법을 찾을 수 없습니다.
ViewController *vc = [[ViewController alloc] init]를 시도했습니다.
NSLog "삽입 광고 요청"이 성공적으로 수행되었습니다.하지만 광고가 표시되지 않습니다.
ViewController.m - viewDidLoad에서 직접 메소드를 사용하면 동일한 메시지 "삽입 광고 요청"을 NSLog에 기록하고 전면 광고를 표시합니다.
해결책
나는 알림을 사용할 것이다:그만큼 SKScene
개체가 시스템 전체에 알림을 게시합니다(NSNotification
) 알림 센터(NSNotificationCenter
), 타겟 뷰 컨트롤러는 동일한 알림을 '등록'(즉, 수신)하고 핸들러 메서드를 구현합니다.이는 Objective-C/Cococa에 널리 퍼져 있는 패턴입니다.
일부 이점은 다음과 같습니다.
확장 가능합니다.나중에 다른 장면의 뷰 컨트롤러에 동일한 메시지를 보내려면 새 장면에서 동일한 알림을 게시하면 됩니다.헤더를 포함하거나 새 속성을 정의할 필요가 없습니다.알림 이름의 정의만 포함하면 됩니다.
뷰 컨트롤러 소유하다 전망, 그리고 전망 선물 장면.에 의해 참조하지 않음 장면에서 뷰 컨트롤러를 사용하면 참조 순환으로 인한 메모리 누수의 위험을 피할 수 있습니다.
그건 그렇고, 이것이 제가 게임에서 하는 일입니다.
다른 팁
iad를 사용하는 방법에 대한 제안;
ViewController.m :
MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.viewController = self;
.
그리고 나서 myscene.h 그 줄을 넣으십시오 :
#import "ViewController.h"
@property (nonatomic) ViewController *viewController;
.
또한 ViewController.m;
에 iad를 추가하는 것을 잊지 마십시오.[self.view addSubview:adView];
.