猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=530

下午添加分享的时候,看着这么多第三方sdk,我还是喜欢ios7默认的分享功能,简洁大方。它也能显示你已安装的社交app。

下面我说下如何在cocos2dx里面使用。

下面是封装好的IOSShareManager.h/m ,这个是一个oc单例类,负责调用分享和保存rootViewController。代码很少,看注释就可以了明白了。

IOSShareManager.h

//
//  IOSShareManager.h
//  IOS7ShareSample
//
//  Created by LiuYanghui on 14-3-22.
//
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface IOSShareManager : NSObject

+ (IOSShareManager *) getInstance;
- (void)share:(CGPoint)pos;

@property (nonatomic, readwrite, retain) id viewController;

@end

IOSShareManager.m

//
//  IOSShareManager.m
//  IOS7ShareSample
//
//  Created by LiuYanghui on 14-3-22.
//
//

#import "IOSShareManager.h"

@interface IOSShareManager()
@property (strong, nonatomic) UIPopoverController *activityPopover;
@end

@implementation IOSShareManager

+ (IOSShareManager *) getInstance
{
    static IOSShareManager* gameMgr = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        gameMgr = [[self alloc] init];
    });
    return gameMgr;
}

- (void)share:(CGPoint)pos
{
    // 你可以先截屏保存到document下,这里的image读取document下面。
    UIImage *image = [UIImage imageNamed:@"HelloWorld.png"];
    NSString *mesg = @"You can add some description info here!";

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[image, mesg] applicationActivities:nil];

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        //iPhone 从底部向上滑出view
        [self.viewController presentViewController:activityViewController animated:YES completion:nil];
    } else {
        //iPad, 弹出view
        if (![self.activityPopover isPopoverVisible]) {
            self.activityPopover = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
            [self.activityPopover presentPopoverFromRect:CGRectMake(pos.x, pos.y, 0, 0) inView:((UIViewController *)self.viewController).view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        } else {
            //Dismiss view,当重复点击时
            [self.activityPopover dismissPopoverAnimated:YES];
        }
    }
}

- (id)init
{
    self = [super init];
    if (self) {
        // init code here

    }
    return self;
}

- (void) dealloc
{
    [super dealloc];
}

@end

上面的是oc的类,下面添加中间层接口,供cpp调用。IOSShare.h/mm 就是我们需要添加的中间层类方法。

IOSShare.h

//
//  IOSShare.h
//  IOS7ShareSample
//
//  Created by LiuYanghui on 14-3-22.
//
//

#ifndef __IOS7ShareSample__IOSShare__
#define __IOS7ShareSample__IOSShare__

class IOSShare {
public:

/*! @brief share
 *
 * 显示分享view,如果是ipad,则从设置位置弹出view
 * @param posX
 * @param posY
 */
    static void share(float posX, float posY);
};

#endif /* defined(__IOS7ShareSample__IOSShare__) */

IOSShare.mm

//
//  IOSShare.cpp
//  IOS7ShareSample
//
//  Created by LiuYanghui on 14-3-22.
//
//

#include "IOSShare.h"
#import "IOSShareManager.h"

void IOSShare::share(float posX, float posY)
{
    [[IOSShareManager getInstance] share:CGPointMake(posX, posY)];
}

ok,下面就是如何使用。

第一步:设置IOSShareManager 的rootViewController。
请在AppController.mm,添加:#import “IOSShareManager.h”, 并在下面函数中设置IOSShareManager 的rootViewController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // ....
    [[IOSShareManager getInstance] setViewController:viewController];
}

第二步:cpp中调用分享,参数坐标当在ipad下的时候,以该坐标为弹出点,弹出分享视图。

IOSShare::share(300, 300);

Cocos2d-x 添加iOS7默认分享/AirDrop的更多相关文章

  1. Android中通过ActionBar为标题栏添加搜索以及分享视窗

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...

  2. hibernate添加数据,默认字段为null的问题解决

    数据库中的一个字段默认为0,但是在用hibernate的添加之后,默认字段竟然不是0,为NULL. 查了一下.发现想要让默认字段生效.需要在*.hbm.xml添加一些参数,如下.(红色部分) dyna ...

  3. chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式。

    参考blog来自 http://segmentfault.com/q/1010000000671971 chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式. 一.发现该问题的原因-是 ...

  4. JDK8新特性,给接口添加一个默认实现

    在JDK8中,允许给接口本身添加一个默认的实现.用“default”进行修饰.如下实例 package interfacetest; public interface TestInterface { ...

  5. 解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 && 一般的浏览器input和button的高度不一致问题

    解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 如果我们把一个表单设置位 autofocus ,这时这个表单在获取焦点后就会产生淡黄色的背景,我们就是使用!importa ...

  6. 给Cocos2D视图添加手势支持

    见如下代码: UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self ac ...

  7. ES6解构过程添加一个默认值和赋值一个新的值

    const info = { name: 'xiaobe', } const { name: nickName = '未知' } = info; 其中nickName是解构过程中新声明的一个变量,并且 ...

  8. 【jquery基础】 jquery.manifest用法:通过后台查询and添加到默认项

    今天做一个东西 效果如下: 后台已经保存了006这个SN码,现在需要查到了这个人(杨小婷),然后作为默认值,展示到 manifest 里面 <script> $(document).rea ...

  9. Liferay 6.2 改造系列之四:重新整理Application添加页面默认提供的Portlet清单

    经过2.3两步后,剩余Portlet已经不多,添加Application页面如下: 将用不到的Portlet隐藏起来:11   Portal目录 (Portal Directory) 将内嵌Protl ...

随机推荐

  1. hdu2669与hdu1576(扩展欧几里德)

    模板: int Extend_Euclid(int a, int b, int &x, int &y){         if(b == 0){             x = 1; ...

  2. poj 1113 凸包周长

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33888   Accepted: 11544 Descriptio ...

  3. AspNetCoreApi 跨域处理

    AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功 ...

  4. STM8操作LCD5110总结

    附上一小段代码: void LCD_init(void) { // 产生一个让LCD复位的低电平脉冲 //LCD_RST = 0; GPIO_WriteLow(LCD_PORTG, LCD_RST); ...

  5. Python中如何自定义一个计时器

    import time as t class MyTimer(): # 初始化构造函数 def __init__(self): self.prompt = "未开始计时..." s ...

  6. Android查缺补漏(线程篇)-- IntentService的源码浅析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8975114.html 在Android中有两个比较容易弄混的概念,Servic ...

  7. 安卓7.1 新特性Shortcut

    介绍 Shortcut 是谷歌在API25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按. 来看下效果吧: 是不是很赞? 那么请随本文一起学习吧 更新 新建项目 在你项目下 ...

  8. Dynamics CRM2016 Update or Create parentcustomerid in Contact using web api

    联系人实体中有个特殊的字段parentcustomerid 在通过web api创建或更新记录时,如果在给这个字段赋值时当做查找字段对待的话,那你就会遇到问题了,报错信息如下 正确的赋值方式如下

  9. Swift完成fizz buzz test

    看到一篇文章上说,很多貌似看过很多本编程书的童鞋连简单的fizz buzz测试都完不成. 不知道fizz buzz test为何物的,建议自行搜之. 测试要求是,编写满足以下条件的代码: Write ...

  10. J2EE进阶(十九)FileNotFoundException: http://hibernate.org/dtd/hibernate-mapping-3.0.dtd

    J2EE进阶(十九)Nested exception: java.io.FileNotFoundException: http://hibernate.org/dtd/hibernate-mappin ...