啊嘴  

   一、自定义UIActivity:

      如果想要自定义UIActivity必须知道UIActivityViewController。首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的,

这一点可以从他的初始化方法中就可以看到。

UIActivityViewController *activityView = [[UIActivityViewController alloc] 
initWithActivityItems:activityItems applicationActivities:activities];

其中activityItems中一个数组,用于存储需要传输的数据,例如需要分享的网址,图片,或者要进行操作的文档。

applicationActivities 也是一数组用于存在需要进行的操作,如果没有自定义的UIActivity,一般都是nil,展示出来的都是一些系统样式。当然系统也封装了一些分享的代码,例如

UIActivityCategoryAction(操作类,用于打印,投影等)

  1. UIActivityTypePrint
  2. UIActivityTypeCopyToPasteboard
  3. UIActivityTypeAssignToContact
  4. UIActivityTypeSaveToCameraRoll
  5. UIActivityTypeAddToReadingList
  6. UIActivityTypeAirDrop

UIActivityCategoryShare(分享类,用于分享,发送等)

  1. UIActivityTypeMessage
  2. UIActivityTypeMail
  3. UIActivityTypePostToFacebook
  4. UIActivityTypePostToTwitter
  5. UIActivityTypePostToFlickr
  6. UIActivityTypePostToVimeo
  7. UIActivityTypePostToTencentWeibo(腾讯微博)
  8. UIActivityTypePostToWeibo(系统自己封装了新浪微博)

系统会检测你所有用于应用的操作,显示在操作面板上面。当然你可以通过

    activityViewC.excludedActivityTypes = @[];筛选出你不需要的类型。

当然根据操作的不同,携带的东西都也有略微的差别,具体自己查阅文档

     前面大致简单介绍一下UIActivityViewController,现在开始自定义UIActivity

<UIActivityItemSource>
获取数据项

  1.  activityViewControllerPlaceholderItem:
  2.  activityViewController:itemForActivityType

提供数据项

  1. activityViewController:subjectForActivityType:
  2. activityViewController:dataTypeIdentifierForActivityType:
  3. activityViewController:thumbnailImageForActivityType:suggestedSize:

上述方法都是需要重写的:

#pragma mark    显示
+ (UIActivityCategory)activityCategory {
    //返回值是告诉系统这个是action类型,还是share类型的,一般默认的是action类型的,所以我们在这里返回一个action类型
    return UIActivityCategoryAction;
}

- (NSString *)activityType {
    //用来区分不用的activity的字符串,用于你的bundle id作为前缀
    return [NSString stringWithFormat:@"%@.NCActivity",[NSBundle mainBundle].bundleIdentifier];
}

- (NSString *)activityTitle {
    return @"返回的是选项图标下面的文字";
}

- (UIImage *)activityImage {
//    因为是ios8.0,所以是支持彩色团素材的,返回的是你所要点击的图标,
    return [UIImage imageNamed:@"wechat_session"];
}


#pragma mark  操作
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
    for (id item in activityItems) {
        if ([item isKindOfClass:[UIImage class]]) {
            return YES;
        }
        
        if ([item isKindOfClass:[NSString class]]) {
            return YES;
        }
        
        if ([item isKindOfClass:[NSURL class]]) {
            return YES;
        }
    }
         return NO;
    //设置可以操作的数据,
}

- (void)prepareWithActivityItems:(NSArray *)activityItems {
    //准备分享所进行的方法,通常在这个方法里面,把item中的东西保存下来
    for (id item in activityItems) {
        if ([item isKindOfClass:[UIImage class]]) {
            self.image = (UIImage *)item;
        }
        
        if ([item isKindOfClass:[NSString class]]) {
            self.text = (NSString *)item;
        }
        
        if ([item isKindOfClass:[NSURL class]]) {
            self.url = (NSURL *)item;
        }
    }
}

- (void)performActivity {
    //这里就可以关联外面的app进行分享操作了
    //也可以进行一些数据的保存等操作
    //操作的最后必须使用下面方法告诉系统分享结束了
    [self activityDidFinish:YES];
}

 

二、简单跳转到微信分享

这里主要用到一个第三方的SDK:libWeiChatSDK.a

马克。。。有点搞混了!

posted on 2016-03-12 14:08  啊嘴  阅读(1643)  评论(0编辑  收藏  举报