IOS广告移动的类(封装好了,所有页面共用一个广告)

  1. //  
  2. //  BannerViewController.h  
  3. //  
  4.   
  5. #import <UIKit/UIKit.h>  
  6. #import <iAd/iAd.h>  
  7. #import <iAd/ADBannerView.h>  
  8.   
  9. #define kUp 1  
  10. #define kDown (-1)  
  11. #define bannerView_h 50  
  12. #define kBannerFrameUnderNav CGRectMake(0, -5032050)  
  13. #define kBannerFrameAboveTab CGRectMake(036732050)  
  14.   
  15. @protocol ADDelegate   
  16. @optional  
  17. //在此方法中调整界面,当b为YES时,表示广告加载成功,调整界面,为NO时失败,界面调回原样  
  18. - (void)ADIsComing:(BOOL)b;  
  19. @end  
  20.   
  21. @interface BannerViewController : NSObject <ADBannerViewDelegate> {  
  22.     id <ADDelegate> delegate;  
  23.     NSInteger upOrDown;     //当广告出现时view向上还是向下滑动  
  24.     ADBannerView *view;  
  25. }  
  26.   
  27. @property (nonatomic, assign) id<ADDelegate> delegate;  
  28. @property (nonatomic, assign) NSInteger upOrDown;  
  29. @property (nonatomic, assign) CGRect frame;  
  30. @property (nonatomic, retain) ADBannerView *view;  
  31.   
  32. + (id) sharedBanner;  
  33. + (void) releaseSharedBanner;  
  34. - (id)initWithFrame:(CGRect)rect;  
  35. - (BOOL) isBannerLoaded;  
  36.   
  37. @end  

[java]  view plain copy
  1. //  
  2. //  BannerViewController.m  
  3. //    
  4. //  
  5. //  Created by   on 9/30/11.  
  6. //  Copyright 2011 __MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import "BannerViewController.h"  
  10.   
  11.   
  12. BOOL receiveAd = NO;  
  13. BannerViewController *bannerViewController;  
  14.   
  15. @implementation BannerViewController  
  16. @synthesize delegate;  
  17. @synthesize upOrDown;  
  18. @synthesize view;  
  19.   
  20.   
  21. + (id) sharedBanner {  
  22.     if (bannerViewController == nil) {  
  23.         bannerViewController = [[[self class] alloc] initWithFrame:kBannerFrameUnderNav];  
  24.         bannerViewController.upOrDown = kUp;  
  25.     }  
  26.     return bannerViewController;  
  27. }  
  28.   
  29. + (void) releaseSharedBanner {  
  30.     [bannerViewController release];  
  31. }  
  32.   
  33. - (id)initWithFrame:(CGRect)rect {  
  34.     self = [super init];  
  35.     if (self != nil) {  
  36.         self.view = [[[ADBannerView alloc] initWithFrame:rect] autorelease];  
  37.         view.delegate = self;  
  38.     }  
  39.     return self;  
  40. }  
  41.   
  42. - (void)setDelegate:(id <ADDelegate>)d {  
  43.     if (delegate == d) return;  
  44.   
  45.     if (view.isBannerLoaded) {  
  46.         if (delegate != nil) {  
  47.             [delegate ADIsComing:NO];  
  48.         }  
  49.         [d ADIsComing:YES];  
  50.     }  
  51.     delegate = d;  
  52. }  
  53.   
  54. - (CGRect)frame {  
  55.     return view.frame;  
  56. }  
  57.   
  58. - (void)setFrame:(CGRect)r {  
  59.     view.frame = r;  
  60. }  
  61.   
  62. - (BOOL) isBannerLoaded {  
  63.     return [(ADBannerView *)self.view isBannerLoaded];  
  64. }  
  65.   
  66. #pragma mark - adbanner view delegage  
  67.   
  68. - (void)bannerViewDidLoadAd:(ADBannerView *)banner {  
  69.     if (receiveAd == NO) {  
  70.         receiveAd = YES;  
  71.         [delegate ADIsComing:YES];  
  72.   
  73.         [UIView beginAnimations:nil context:nil];  
  74.         [UIView setAnimationDuration:0.3];  
  75.         banner.frame = CGRectOffset(banner.frame, 0, upOrDown * (banner.frame.size.height + 12));  
  76.         [UIView commitAnimations];  
  77.     }  
  78. }  
  79.   
  80. - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {  
  81.     if (receiveAd == YES) {  
  82.         receiveAd = NO;  
  83.         [delegate ADIsComing:NO];  
  84.   
  85.         [UIView beginAnimations:nil context:nil];  
  86.         [UIView setAnimationDuration:0.3];  
  87.         banner.frame = CGRectOffset(banner.frame, 0, -(upOrDown * (banner.frame.size.height + 12)));  
  88.         [UIView commitAnimations];  
  89.     }  
  90. }  
  91.   
  92. - (void)bannerViewActionDidFinish:(ADBannerView *)banner {  
  93.   
  94. }  
  95.   
  96. - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {  
  97.     return YES;  
  98. }  
  99.   
  100. - (void)dealloc {  
  101.     self.view = nil;  
  102.     [super dealloc];  
  103. }  
  104.   
  105. @end  

使用方法:

1:在viewDidAppear:方法中添加以下代码,共享广告,设置委托为self

[java]  view plain copy
  1. - (void)viewDidAppear:(BOOL)animated  
  2. {  
  3.       
  4. #ifdef CONTRACTIONM_FREE_2_0_  
  5.         BannerViewController *banner = [BannerViewController sharedBanner];  
  6.         self.bannerViewController = banner;  
  7.         banner.delegate = self;  
  8.         banner.upOrDown = kUp;  
  9.         [self.view addSubview:self.bannerViewController.view];  
  10. #endif  
  11.      
  12.     [super viewDidAppear:animated];  
  13. }  

2:在委托方法中根据b的值 ,调整界面

[java]  view plain copy
  1. #ifdef CONTRACTIONM_FREE_2_0_  
  2. - (void)ADIsComing:(BOOL)b  
  3. {  
  4.     if (b == YES) {  
  5.         if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {  
  6.             self.settingsScrollView.frame = CGRectMake(060320356);  
  7.             self.settingsScrollView.contentOffset = CGPointMake(050);  
  8.             [self.settingsScrollView flashScrollIndicators];  
  9.             [self.settingsScrollView setContentOffset:CGPointMake(00) animated:YES];  
  10.         }  
  11.     }  
  12.     else {  
  13.         self.settingsScrollView.frame = CGRectMake(00320416);  
  14.     }  
  15. }  
  16. #endif  


3:少了一步最最最重要的,我一直浪费了一天在这个上面,气死我啦,在页面跳转的时候把委托置为nil

[java]  view plain copy
  1. -(void)viewWillDisappear:(BOOL)animated  
  2. {  
  3.     self.bannerViewController.delegate = nil;  
  4.     [super viewWillDisappear:animated];  

你可能感兴趣的:(IOS广告移动的类(封装好了,所有页面共用一个广告))