iOS系統分享詳解

一、系統分享介紹

iOS系統自帶的分享功能,可以讓用戶方便地將內容分享到社交媒體、郵件、信息等各種平台上,不用一一複製、粘貼或者進入其他app。iOS系統已經為開發者提供了強大的API,可以實現分享內容的自定義和更多的個性化設置。

二、分享內容類型

在iOS系統分享中,可以分享的內容類型主要包括文字、鏈接、圖片、音頻和視頻等,下面分別介紹:

1. 文字分享

分享純文本可以調用系統自帶的分享面板,代碼實現如下:

UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[@"分享的文本內容"] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];

2. 鏈接分享

分享鏈接同樣也可以使用系統自帶的分享面板,代碼如下:

NSString *urlStr = @"http://www.example.com";
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[[NSURL URLWithString:urlStr]] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];

3. 圖片分享

圖片分享可以使用系統提供的UIActivityViewController,並配合UIImagePickerViewController選擇圖片,代碼實現如下:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:imagePicker animated:YES completion:nil];

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
    NSArray *array = @[image];
    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:array applicationActivities:nil];
    [picker dismissViewControllerAnimated:YES completion:nil];
    [self presentViewController:activityVC animated:YES completion:nil];
}

4. 音頻分享

分享音頻同樣可以使用UIActivityViewController實現,具體代碼如下:

NSArray *activityItems = @[[NSURL fileURLWithPath:self.audioPath]];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];

5. 視頻分享

同樣可以使用UIActivityViewController實現視頻分享,代碼如下:

NSArray *activityItems = @[[NSURL fileURLWithPath:self.videoPath]];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];

三、自定義分享

對於開發者來說,系統自帶的分享功能無法滿足需求時,可以自定義分享界面。下面介紹昵稱、頭像自定義分享:

1. 昵稱自定義

首先創建分享的item,並通過UIActivityViewController分享,代碼如下:

NSString *shareTitle = @"需要分享的標題";
UIImage *shareImage = [UIImage imageNamed:@"shareImage"];
NSURL *shareURL = [NSURL URLWithString:@"http://www.example.com"];
NSArray *activityItems = @[shareTitle, shareImage, shareURL];

WeChatSessionActivity *weChatSessionActivity = [[WeChatSessionActivity alloc]init];
WeChatTimeLineActivity *weChatTimelineActivity = [[WeChatTimeLineActivity alloc]init];

NSArray *activityArray = @[weChatSessionActivity,weChatTimelineActivity];

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:activityArray];
activityController.excludedActivityTypes = @[UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];

[self presentViewController:activityController animated:YES completion:^{
    NSLog(@"share action sheet shown");
}];

接着修改自定義的UIActivity實現,對於微信分享,可以修改WeChatSessionActivity和WeChatTimeLineActivity,在分享前彈框讓用戶輸入昵稱,代碼如下(以WeChatSessionActivity為例):

- (UIViewController *)activityViewController{
    return nil;
}

- (NSString *)activityType{
    return NSStringFromClass([self class]);
}

- (NSString *)activityTitle{
    return @"微信好友";
}

- (UIImage *)activityImage{
    return [UIImage imageNamed:@"ActivityIcon_WechatSession"];
}

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems{
    return YES;
}

- (void)prepareWithActivityItems:(NSArray *)activityItems{
    self.title = [activityItems objectAtIndex:0];
    self.image = [activityItems objectAtIndex:1];
    self.url = [activityItems objectAtIndex:2];
}

- (void)performActivity{
    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"請輸入微信昵稱" message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alertVC addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"微信昵稱";
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = self.title;
        message.description = @"";
        [message setThumbImage:self.image];
        WXWebpageObject *webpageObject = [WXWebpageObject object];
        webpageObject.webpageUrl = self.url.absoluteString;
        message.mediaObject = webpageObject;
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneSession;
        
        BOOL isSuccess = [WXApi sendReq:req];
        if (!isSuccess) {
            NSLog(@"微信分享失敗");
        }
        
    }];
    [alertVC addAction:cancelAction];
    [alertVC addAction:okAction];
    UIViewController *currentVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    [currentVC presentViewController:alertVC animated:YES completion:nil];
}

2. 頭像自定義

同樣保存昵稱輸入的內容,代碼如下:

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:@[@{@"name":@"test", @"avatar":[UIImage imageNamed:@"avatar.jpg"]}] applicationActivities:nil];
[MomentsActivity registerAppSupport];
activityController.excludedActivityTypes = @[UIActivityTypePostToFacebook,
                                             UIActivityTypePostToTwitter,
                                             UIActivityTypePostToWeibo,
                                             UIActivityTypePostToVimeo,
                                             UIActivityTypePostToFlickr,
                                             UIActivityTypeMessage,
                                             UIActivityTypeMail,
                                             UIActivityTypePrint];
[self presentViewController:activityController animated:YES completion:nil];

微信朋友圈分享實現,代碼如下:

- (void)performActivity{
    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"請輸入微信昵稱" message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alertVC addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"微信昵稱";
    }];
    
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = @"微信朋友圈";
        
        // 設置描述
        message.description = @"";
        UIImage *shareImage = [UIImage imageNamed:@"avatar.jpg"];
        [message setThumbImage:shareImage];
        
        WXImageObject *imageObject = [WXImageObject object];
        imageObject.imageData = UIImageJPEGRepresentation(shareImage, 0.5);
        message.mediaObject = imageObject;
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneTimeline;
        [WXApi sendReq:req];
    }];
    
    [alertVC addAction:cancelAction];
    [alertVC addAction:okAction];
    UIViewController *currentVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    [currentVC presentViewController:alertVC animated:YES completion:nil];
}

四、總結

iOS系統分享功能能夠方便地將內容分享到多個社交媒體、郵件、信息等平台上。系統自帶的UIActivityViewController提供了功能齊全的默認分享面板,而自定義分享方式可以大大提高用戶體驗。開發者可以根據需求選擇對應的分享方式來滿足分享需求。

原創文章,作者:TNKLT,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/361134.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TNKLT的頭像TNKLT
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相關推薦

  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 如何在樹莓派上安裝Windows 7系統?

    隨着樹莓派的普及,許多用戶想在樹莓派上安裝Windows 7操作系統。 一、準備工作 在開始之前,需要準備以下材料: 1.樹莓派4B一台; 2.一張8GB以上的SD卡; 3.下載並…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • 分銷系統開發搭建

    本文主要介紹如何搭建一套完整的分銷系統,從需求分析、技術選型、開發、部署等方面進行說明。 一、需求分析 在進行分銷系統的開發之前,我們首先需要對系統進行需求分析。一般來說,分銷系統…

    編程 2025-04-29
  • 雲盤開源系統哪個好?

    本文將會介紹幾種目前主流的雲盤開源系統,從不同方面對它們做出分析比較,以此來確定哪個雲盤開源系統是最適合您的。 一、Seafile Seafile是一款非常出色的雲盤開源系統,它的…

    編程 2025-04-28
  • EulerOS V2R7:企業級開發首選系統

    本文將從多個方面為您介紹EulerOS V2R7,包括系統簡介、安全性、易用性、靈活性和應用場景等。 一、系統簡介 EulerOS V2R7是一個華為公司開發的企業級操作系統,該系…

    編程 2025-04-28
  • 基於Python點餐系統的實現

    在當前瞬息萬變的社會,餐飲行業也在加速發展,如何更好地為客戶提供更加便捷、高效、個性化的點餐服務,成為每個餐飲企業需要思考的問題。本文以基於Python的點餐系統為例,通過優化用戶…

    編程 2025-04-28
  • Ubuntu系統激活Python環境

    本文將從以下幾個方面詳細介紹在Ubuntu系統中如何激活Python環境: 一、安裝Python 在Ubuntu系統中默認已經預裝了Python解釋器,可以通過以下命令來檢查: $…

    編程 2025-04-28
  • 如何在Windows系統下載和使用cygwin?

    如果你是一名Windows系統的開發者,你可能會遇到一個問題,那就是缺少Unix/Linux系統下常用的命令行工具,這時候,你可以使用cygwin來解決這個問題。 一、cygwin…

    編程 2025-04-27
  • Python智能測評系統答案解析

    Python智能測評系統是一款用於自動批改Python代碼的工具,它通過較為底層的方法對代碼進行分析,在編譯和執行代碼時自動判斷正確性,從而評估代碼的得分情況。下面將從多個方面對P…

    編程 2025-04-27

發表回復

登錄後才能評論