• cocos2dx 在iphone中添加iAd的代码问题例子


    http://www.cocoachina.com/bbs/read.php?tid=142623&keyword=cocos2dx%7Ciphone%7C%B9%E3%B8%E6

    已基本实现iad加入应用中,就是在使用ipad的时有一个问题,可能比较少的人遇到。具体情况是:
    应用只支持正常的竖屏模式,但是在ipad加载广告后,我是指点击广告后,广告全屏并显示,并且会将屏幕旋转为横屏,然后关闭广告回 到应用,那么应用也会变为横屏。如果将屏幕旋转锁定,那么屏幕就转不回来了。我加了测试,在rootViewController 中:-(void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
        NSLog(@"RootViewController 视图旋转方向发生改变时会自动调用");
    }


    确实显示屏幕rootViewController被旋转,如何禁止iad旋转屏幕或者如何让应用自动恢复正常方向,而不需要通过旋转设备。期望版主、大侠。。。。给点提示?

    代码见附件:加不了附件??
    贴代码:
    /  AdViewController.h
    #import <UIKit/UIKit.h>
    #import <iAd/iAd.h>
    @interface AdViewController : UIViewController <ADBannerViewDelegate>
    @end

    //  AdViewController.m
    //

    #import "AdViewController.h"

    @interface AdViewController ()

    @end

    @implementation AdViewController
    {
        ADBannerView *_bannerView;
    }

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            // On iOS 6 ADBannerView introduces a new initializer, use it when available.
            if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)]) {
                _bannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
            } else {
                _bannerView = [[ADBannerView alloc] init];
            }
            _bannerView.delegate = self;    


        }
        return self;
    }
    - (void)layoutAnimated:(BOOL)animated
    {
        // As of iOS 6.0, the banner will automatically resize itself based on its width.
        // To support iOS 5.0 however, we continue to set the currentContentSizeIdentifier appropriately.
        CGRect contentFrame = self.view.bounds;
        if (contentFrame.size.width < contentFrame.size.height) {
            _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
        } else {
            _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;
        }

        CGRect bannerFrame = _bannerView.frame;
        if (_bannerView.bannerLoaded) {
            contentFrame.size.height -= _bannerView.frame.size.height;
            bannerFrame.origin.y = contentFrame.size.height;
        } else {
            bannerFrame.origin.y = contentFrame.size.height;
        }

        [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{
            _bannerView.frame = bannerFrame;
        }];
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    // Do any additional setup after loading the view.
        [self.view addSubview:_bannerView];
    }
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [self layoutAnimated:NO];
    }
    - (void)viewDidDisappear:(BOOL)animated
    {
        [super viewDidDisappear:animated];
    }
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return UIInterfaceOrientationIsPortrait( interfaceOrientation );
    }
    #endif
    - (NSUInteger)supportedInterfaceOrientations
    {
    #ifdef __IPHONE_6_0
        return UIInterfaceOrientationMaskPortrait;
    #endif
    }
    - (BOOL) shouldAutorotate {
        return YES;
    }
    - (void)viewDidLayoutSubviews
    {
        [self layoutAnimated:[UIView areAnimationsEnabled]];
    }

    #pragma mark -
    #pragma mark iAd广告代理
    - (void)bannerViewDidLoadAd:(ADBannerView *)banner
    {
        NSLog(@"iad bannerViewDidLoadAd");
        [self layoutAnimated:YES];
    }

    - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
    {
        NSLog(@"iad didFailToReceiveAd");
        [self layoutAnimated:YES];
    }

    - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
    {

        return YES;
    }

    - (void)bannerViewActionDidFinish:(ADBannerView *)banner
    {
        NSLog(@"actiondidfinish");

    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }


    @end


    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__


    #include "cocos2d.h"
    //#include "AdsAdmob.h"


    class HelloWorld : public cocos2d::CCLayer
    {
    public:
        // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
        virtual bool init();

        //添加广告必须
        static void addAd();//添加iad
        static void deletAd();//删除iad
        static void * view;//EGLView指针


        // there's no 'id' in cpp, so we recommend to return the class instance pointer
        static cocos2d::CCScene* scene();

        // a selector callback
        void menuCloseCallback(CCObject* pSender);

        // preprocessor macro for "static create()" constructor ( node() deprecated )
        CREATE_FUNC(HelloWorld);
    };

    #endif // __HELLOWORLD_SCENE_H__

    #include "HelloWorldScene.h"
    #include "SimpleAudioEngine.h"
    #include "AdViewController.h"
    #import "EAGLView.h"

    using namespace cocos2d;
    using namespace CocosDenshion;

    CCScene* HelloWorld::scene()
    {
        // 'scene' is an autorelease object
        CCScene *scene = CCScene::create();

        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();


        // add layer as a child to scene
        scene->addChild(layer);


        // return the scene
        return scene;
    }


    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !CCLayer::init() )
        {
            return false;
        }

        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.


        // add a "close" icon to exit the progress. it's an autorelease object
        CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                            "CloseNormal.png",
                                            "CloseSelected.png",
                                            this,
                                            menu_selector(HelloWorld::menuCloseCallback) );
        pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );


        // create menu, it's an autorelease object
        CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
        pMenu->setPosition( CCPointZero );
        this->addChild(pMenu, 1);


        /////////////////////////////
        // 3. add your codes below...

        // add a label shows "Hello World"
        // create and initialize a label
        CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);

        // ask director the window size
        CCSize size = CCDirector::sharedDirector()->getWinSize();


        // position the label on the center of the screen
        pLabel->setPosition( ccp(size.width / 2, size.height - 20) );


        // add the label as a child to this layer
        this->addChild(pLabel, 1);


        // add "HelloWorld" splash screen"
        CCSprite* pSprite = CCSprite::create("HelloWorld.png");

        // position the sprite on the center of the screen
        pSprite->setPosition( ccp(size.width/2, size.height/2) );

        // add the sprite as a child to this layer
        this->addChild(pSprite, 0);

        //add iAd
        AdViewController* pAdsViewCtrl = [[AdViewController alloc] initWithNibName:nil bundle:nil];

        [[EAGLView sharedEGLView] addSubview:pAdsViewCtrl.view];

        return true;
    }

    void HelloWorld::menuCloseCallback(CCObject* pSender)
    {
        CCDirector::sharedDirector()->end();

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
    }

  • 相关阅读:
    Linux编程之UDP SOCKET全攻略
    Java8 flatMap的sample
    swagger bug
    bash中的pasue
    树、二叉树、满二叉树、完全二叉树概念分清
    复习一下高中数学
    SpringBoot Junit Maven JaCoCo
    事务传播和隔离
    springboot swagger2 泛型踩坑记
    Code::Blocks debug程序
  • 原文地址:https://www.cnblogs.com/playerboy/p/3723312.html
Copyright © 2020-2023  润新知