REActivityViewController 1.6.7

REActivityViewController 1.6.7

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Roman Efimov 维护。



 
依赖
AFNetworking~> 1.3
Facebook-iOS-SDK>= 3.5
DEFacebookComposeViewController~> 1.0.0
REComposeViewController~> 2.1.2
SFHFKeychainUtils~> 0.0.1
PocketAPI~> 1.0.2
AFXAuthClient~> 1.0.8
 

  • Roman Efimov

UIActivityViewController 的开源替代品,具有高度可定制性和 iOS 5.0 兼容性。它允许您轻松创建自定义活动,控制它们的显示和行为,不再受默认 UIActivity 的单色图标限制。

REActivityViewController Screenshot

默认活动包括

  • Facebook
  • Twitter
  • VKontakte
  • Tumblr(使用 XAuth)
  • 消息
  • 邮件
  • 在 Safari 中打开
  • 保存到 Pocket
  • 发送到 Instapaper
  • 保存到 Readability
  • 保存到 Diigo
  • 保存到 Kippt
  • 保存到相册
  • 在地图中打开
  • 打印
  • 复制

所有活动均兼容 iOS 5.0。

要求

  • Xcode 4.5 或更高版本
  • Apple LLVM 编译器
  • iOS 5.0 或更高版本
  • ARC

演示

首先,您需要在演示项目中使用 CocoaPods 软件包管理器安装依赖项

$ pod install

然后,在 Xcode 中构建和运行 REActivityViewControllerExample 项目,以查看 REActivityViewController 的实际应用。

如果您没有安装 CocoaPods,请查看以下“安装”部分。

安装

建议使用 CocoaPods 软件包管理器安装 REActivityViewController,因为它提供了灵活的依赖项管理和简单的安装过程。

如果尚未安装,请安装 CocoaPods

$ [sudo] gem install cocoapods
$ pod setup

编辑您的 Podfile 并添加 REActivityViewController

$ edit Podfile
platform :ios, '5.0'
pod 'REActivityViewController', '~> 1.6.7'

将 REActivityViewController 安装到您的 Xcode 项目中

$ pod install

#include "REActivityViewController.h" 添加到使用它的类的顶部。

手动安装

REActivityViewController 需要链接以下框架

  • QuartzCore
  • AssetsLibrary
  • MessageUI
  • Twitter

以下框架必须作为可选(弱引用)添加

  • Social

依赖项

示例用法

配置与展示 REActivityViewController

展示 REActivityViewController 非常简单,就像 1-2-3 一样。首先,准备你打算使用的活动。你可以在你的代码中直接创建自定义活动,无需像 UIActivityViewController 一样进行子类化或提供者(provider)。一旦你的活动准备就绪,准备数据源(userInfo)并显示视图控制器。

// Prepare activities
//
REFacebookActivity *facebookActivity = [[REFacebookActivity alloc] init];
RETwitterActivity *twitterActivity = [[RETwitterActivity alloc] init];
REVKActivity *vkActivity = [[REVKActivity alloc] initWithClientId:@"VK APP ID"];
RETumblrActivity *tumblrActivity = [[RETumblrActivity alloc] initWithConsumerKey:@"CONSUMER KEY" consumerSecret:@"CONSUMER SECRET"];
REMessageActivity *messageActivity = [[REMessageActivity alloc] init];
REMailActivity *mailActivity = [[REMailActivity alloc] init];
RESafariActivity *safariActivity = [[RESafariActivity alloc] init];
REPocketActivity *pocketActivity = [[REPocketActivity alloc] initWithConsumerKey:@"CONSUMER KEY"];
REInstapaperActivity *instapaperActivity = [[REInstapaperActivity alloc] init];
REReadabilityActivity *readabilityActivity = [[REReadabilityActivity alloc] initWithConsumerKey:@"CONSUMER KEY" consumerSecret:@"CONSUMER SECRET"];
REDiigoActivity *diigoActivity = [[REDiigoActivity alloc] initWithAPIKey:@"API KEY"];
REKipptActivity *kipptActivity = [[REKipptActivity alloc] init];
RESaveToCameraRollActivity *saveToCameraRollActivity = [[RESaveToCameraRollActivity alloc] init];
REMapsActivity *mapsActivity = [[REMapsActivity alloc] init];
REPrintActivity *printActivity = [[REPrintActivity alloc] init];
RECopyActivity *copyActivity = [[RECopyActivity alloc] init];

// Create some custom activity
//
REActivity *customActivity = [[REActivity alloc] initWithTitle:@"Custom"
                                                         image:[UIImage imageNamed:@"REActivityViewController.bundle/Icon_Custom"]
                                                   actionBlock:^(REActivity *activity, REActivityViewController *activityViewController) {
                                                       [activityViewController dismissViewControllerAnimated:YES completion:^{
                                                           NSLog(@"Info: %@", activityViewController.userInfo);
                                                       }];
                                                   }];

// Compile activities into an array, we will pass that array to
// REActivityViewController on the next step
//
NSArray *activities = @[facebookActivity, twitterActivity, vkActivity, tumblrActivity,
messageActivity, mailActivity, safariActivity, pocketActivity, instapaperActivity,
readabilityActivity, diigoActivity, kipptActivity, saveToCameraRollActivity, mapsActivity,
printActivity, copyActivity, customActivity];

// Create REActivityViewController controller and assign data source
//
REActivityViewController *activityViewController = [[REActivityViewController alloc] initWithViewController:self activities:activities];
activityViewController.userInfo = @{
    @"image": [UIImage imageNamed:@"Flower.jpg"],
    @"text": @"Hello world!",
    @"url": [NSURL URLWithString:@"https://github.com/romaonthego/REActivityViewController"],
    @"coordinate": @{@"latitude": @(37.751586275), @"longitude": @(-122.447721511)}
};

[activityViewController presentFromRootViewController];

你还可以定义每个活动的 userInfo 字典,例如

twitterActivity.userInfo = @{@"image": [UIImage imageNamed:@"Flower.jpg"],
                             @"text": @"Hello world! via @myapp"};

针对 iPad 的特定内容

在 iPad 上,你应该使用 UIPopoverController 来展示 REActivityViewController。`UIViewController` 的 `_popoverController` 属性仍然是一个私有 API( sigh),因此我们需要手动传递它:`activityViewController.presentingPopoverController = _activityPopoverController;`

// Create REActivityViewController controller and assign data source
//
REActivityViewController *activityViewController = [[REActivityViewController alloc] initWithViewController:self.navigationController activities:activities];
    @"image": [UIImage imageNamed:@"Flower.jpg"],
    @"text": @"Hello world!",
    @"url": [NSURL URLWithString:@"https://github.com/romaonthego/REActivityViewController"],
    @"coordinate": @{@"latitude": @(37.751586275), @"longitude": @(-122.447721511)}
};

_activityPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
activityViewController.presentingPopoverController = _activityPopoverController;
[_activityPopoverController presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem
                                   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

请注意,我们的显示视图控制器是导航控制器,所以我们通过 `initWithViewController` 将其传递。

创建自定义活动

创建自定义活动非常简单

REActivity *customActivity = [[REActivity alloc] initWithTitle:@"Custom"
                                                         image:[UIImage imageNamed:@"REActivityViewController.bundle/Icon_Custom"]
                                                   actionBlock:^(REActivity *activity, REActivityViewController *activityViewController) {
                                                       [activityViewController dismissViewControllerAnimated:YES completion:^{
                                                           NSLog(@"Hey, there!");
                                                       }];
                                                   }];

如果你想子类化一个活动,将以下代码添加到你的 `init` 函数中,例如

#import "MyCustomActivity.h"
#import "REActivityViewController.h"

@implementation MyCustomActivity

- (id)init
{
    return [super initWithTitle:@"My Activity"
                          image:[UIImage imageNamed:@"My_Icon"]
                    actionBlock:^(REActivity *activity, REActivityViewController *activityViewController) {
                        // Your code goes here
                    }];
}

@end

自定义

所有视图都对外公开,可供你自定义。比如,你想改变控制器的背景并自定义取消按钮,你可以这样做

REActivityViewController *activityViewController = [[REActivityViewController alloc] initWithViewController:self activities:activities];

activityViewController.activityView.backgroundImageView.image = [UIImage imageNamed:@"My_Cool_Background"];
[activityViewController.activityView.cancelButton setBackgroundImage:[UIImage imageNamed:@"My_Cool_Button"] forState:UIControlStateNormal];

你的自定义活动图标必须是 118x118 像素,并且应包含光泽、圆角和阴影。制作它们的简单方法

  1. 在 Photoshop 中打开你的 114x114 图标并带有圆角(你可以使用来自 http://appicontemplate.com 的模板将方形图标转换成圆形)。
  2. 调整画布大小以使 118x118,以便图标的顶部部分触及画布的顶部部分。
  3. 为图标层添加阴影:角度 90 度,不透明度 40%,距离 2 像素,大小 2 像素。

联系

Roman Efimov

许可协议

REActivityViewController 在 MIT 许可证下可用。

版权所有 © 2013 Roman Efimov。

特此授予任何人获得此软件及其相关文档(“软件”)副本的副本(以下简称“软件”)免费许可,任何人均可在不受限制的情况下处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件副本的个人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含软件的所有副本或主要部分的副本。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、适用于特定目的和版权非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论此类责任是因合同、侵权或其他行为产生的,无论此类行为是否与软件或其使用或任何其他相关联系产生。