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