2015-02-04 2 views
0

싱글 톤을 통해 내 아이디를 처리하려고합니다. 여러 배너에서이 배너를 사용하고 있기 때문입니다. 이제는 광고가 표시되거나 오류가 발생했을 때 각보기 컨트롤러에서 다르게 이동하기 때문에 이러한 객체가 저장하는 내용을 혼동합니다. 이 initalized 방법iOS : iAd Singleton Confusion

+ (MySingleton *)sharedInstance { 
    static dispatch_once_t once; 
    static MySingleton * sharedInstance; 
    dispatch_once(&once, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 
    return sharedInstance; 
} 

- (id)init 
{ 
    if (self = [super init]) { 

     if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)]) { 

      self.bannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner]; 
     } else { 
      self.bannerView = [[ADBannerView alloc] init]; 
     } 
    } 
    return self; 
} 

그리고 여기에 : 여기에 내 코드 :

싱글

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    //iAd 
    if(![[NSUserDefaults standardUserDefaults] objectForKey:kInAppPurchaseNoAds]){ 
     self.bannerView = [MySingleton sharedInstance].bannerView; 
     self.bannerView.delegate = self; 
     self.bannerView.frame = CGRectOffset(self.bannerView.frame, 0, self.view.frame.size.height); 
     [self.view addSubview:self.bannerView]; 
    } 
} 

그리고 위임 방법 : 이제

- (void)showBanner 
{ 
    if(!self.isBannerVisible){ 
     [self.view layoutIfNeeded]; 
     [UIView animateWithDuration:0.5 
         animations:^{ 
          //Restore the constraint 
          self.mainContainerToSuperviewConstraint.constant = 50; 
          //Move the banner on 
          self.bannerView.frame = CGRectOffset(self.bannerView.frame, 0, -50); 
          [self.view layoutIfNeeded]; 
         } completion:^(BOOL finished) { 
          self.isBannerVisible = YES; 
         }]; 
    } 
} 

- (void)hideBanner 
{ 
    if(self.isBannerVisible){ 
     [self.view layoutIfNeeded]; 
     [UIView animateWithDuration:0.5 
         animations:^{ 
          //Restore the constraint 
          self.mainContainerToSuperviewConstraint.constant = 0; 
          //Move the banner off 
          self.bannerView.frame = CGRectOffset(self.bannerView.frame, 0, self.bannerView.frame.size.height); 
          [self.view layoutIfNeeded]; 
         } completion:^(BOOL finished) { 
          self.isBannerVisible = NO; 
         }]; 
    } 
} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    [self showBanner]; 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    [self hideBanner]; 
} 

내가 혼란 스러워요 것입니다 , 사용자가 iAd와 함께 다른보기에있는 경우 배너보기의 위치를 ​​다시 확인해야합니까? 눈에 보이는 배너와 함께 화면 하단에서 75을 말하며 50이 아니라고합시다. 또는이 위치가 AdBannerView에 영향을 미치지 않고 각 클래스의 단일 객체에만 영향을 미칩니 까? 내 말은 그가 다른보기에 있었고 코드에서 배너를 아래쪽에서 75 픽셀로 이동 시켰습니다.이 75 픽셀이 내 싱글 톤 AdView에 저장되어 있습니까? 그래서 원래의 견해는 지금 50 세가 아니라 75 세의 기치를 가졌습니까?

답변

2

하나의보기 인스턴스는 하나의보기의 하위보기 일 수 있으므로 추가/제거를 추적해야하며 다시 추가 할 때마다 프레임을 설정해야합니다. 하위보기로. 인스턴스 생성 논리와 배너 제어를 공유하기위한 일종의 기본 뷰 컨트롤러가 있어야합니다.

+0

iAd BannerView를 싱글 톤으로 만들 것을 권장하지 않습니까? 나는 3 개의 뷰 컨트롤러에 iAd를 보여 주며, 문제없이 매번 인스턴스화 할 수 있습니다. – MichiZH