天天看点

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

//  

//  bannerviewcontroller.h  

#import <uikit/uikit.h>  

#import <iad/iad.h>  

#import <iad/adbannerview.h>  

#define kup 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;  

//  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];  

        banner.frame = cgrectoffset(banner.frame, 0, -(upordown * (banner.frame.size.height + 12)));  

- (void)bannerviewactiondidfinish:(adbannerview *)banner {  

- (bool)bannerviewactionshouldbegin:(adbannerview *)banner willleaveapplication:(bool)willleave {  

    return yes;  

- (void)dealloc {  

    self.view = nil;  

    [super dealloc];  

使用方法:

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的值 ,调整界面

- (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);  

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

-(void)viewwilldisappear:(bool)animated  

    self.bannerviewcontroller.delegate = nil;  

    [super viewwilldisappear:animated];