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

来源:互联网 发布:nodejs mysql建模 编辑:程序博客网 时间:2024/05/17 23:04
////  BannerViewController.h//#import <UIKit/UIKit.h>#import <iAd/iAd.h>#import <iAd/ADBannerView.h>#definekUp 1#define kDown (-1)#define bannerView_h 50#define kBannerFrameUnderNav CGRectMake(0, -50, 320, 50)#define kBannerFrameAboveTab CGRectMake(0, 367, 320, 50)@protocol ADDelegate @optional//在此方法中调整界面,当b为YES时,表示广告加载成功,调整界面,为NO时失败,界面调回原样- (void)ADIsComing:(BOOL)b;@end@interface BannerViewController : NSObject <ADBannerViewDelegate> {    id <ADDelegate> delegate;    NSInteger upOrDown;//当广告出现时view向上还是向下滑动    ADBannerView *view;}@property (nonatomic, assign) id<ADDelegate> delegate;@property (nonatomic, assign) NSInteger upOrDown;@property (nonatomic, assign) CGRect frame;@property (nonatomic, retain) ADBannerView *view;+ (id) sharedBanner;+ (void) releaseSharedBanner;- (id)initWithFrame:(CGRect)rect;- (BOOL) isBannerLoaded;@end

////  BannerViewController.m//  ////  Created by   on 9/30/11.//  Copyright 2011 __MyCompanyName__. All rights reserved.//#import "BannerViewController.h"BOOL receiveAd = NO;BannerViewController *bannerViewController;@implementation BannerViewController@synthesize delegate;@synthesize upOrDown;@synthesize view;+ (id) sharedBanner {    if (bannerViewController == nil) {        bannerViewController = [[[self class] alloc] initWithFrame:kBannerFrameUnderNav];        bannerViewController.upOrDown = kUp;    }    return bannerViewController;}+ (void) releaseSharedBanner {    [bannerViewController release];}- (id)initWithFrame:(CGRect)rect {    self = [super init];    if (self != nil) {        self.view = [[[ADBannerView alloc] initWithFrame:rect] autorelease];        view.delegate = self;    }    return self;}- (void)setDelegate:(id <ADDelegate>)d {    if (delegate == d) return;    if (view.isBannerLoaded) {        if (delegate != nil) {            [delegate ADIsComing:NO];        }        [d ADIsComing:YES];    }    delegate = d;}- (CGRect)frame {    return view.frame;}- (void)setFrame:(CGRect)r {    view.frame = r;}- (BOOL) isBannerLoaded {    return [(ADBannerView *)self.view isBannerLoaded];}#pragma mark - adbanner view delegage- (void)bannerViewDidLoadAd:(ADBannerView *)banner {    if (receiveAd == NO) {        receiveAd = YES;        [delegate ADIsComing:YES];        [UIView beginAnimations:nil context:nil];        [UIView setAnimationDuration:0.3];        banner.frame = CGRectOffset(banner.frame, 0, upOrDown * (banner.frame.size.height + 12));        [UIView commitAnimations];    }}- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {    if (receiveAd == YES) {        receiveAd = NO;        [delegate ADIsComing:NO];        [UIView beginAnimations:nil context:nil];        [UIView setAnimationDuration:0.3];        banner.frame = CGRectOffset(banner.frame, 0, -(upOrDown * (banner.frame.size.height + 12)));        [UIView commitAnimations];    }}- (void)bannerViewActionDidFinish:(ADBannerView *)banner {}- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {    return YES;}- (void)dealloc {    self.view = nil;    [super dealloc];}@end

使用方法:

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

- (void)viewDidAppear:(BOOL)animated{    #ifdef CONTRACTIONM_FREE_2_0_        BannerViewController *banner = [BannerViewController sharedBanner];        self.bannerViewController = banner;        banner.delegate = self;        banner.upOrDown = kUp;        [self.view addSubview:self.bannerViewController.view];#endif       [super viewDidAppear:animated];}

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

#ifdef CONTRACTIONM_FREE_2_0_- (void)ADIsComing:(BOOL)b{    if (b == YES) {        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {            self.settingsScrollView.frame = CGRectMake(0, 60, 320, 356);            self.settingsScrollView.contentOffset = CGPointMake(0, 50);            [self.settingsScrollView flashScrollIndicators];            [self.settingsScrollView setContentOffset:CGPointMake(0, 0) animated:YES];        }    }    else {        self.settingsScrollView.frame = CGRectMake(0, 0, 320, 416);    }}#endif


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

-(void)viewWillDisappear:(BOOL)animated{    self.bannerViewController.delegate = nil;    [super viewWillDisappear:animated];}


原创粉丝点击