2014-10-18 5 views
3

안녕하세요. 하나의 소셜 네트워크 앱을 개발 중입니다. 그게 내 애플 리케이션 API의 확장을 사용하여 이미지를 공유해야했다. 목표 C이 아닌 스위프트으로 내 앱을 개발 중입니다. 어떤 몸이라도이 문제를 해결할 수 있습니까? 목표 C에서 공유 확장을 만들기ios8의 공유 확장 프로그램을 사용하여 이미지 공유

+0

당신이 이미지를 얻는 방법을 말할 수 이쪽을 봐 몇 공유 데이터 유형 중 하나 나타납니다 확장을 작성하려면? – Yohan

답변

4

  1. 앱 확장이 포함 된 응용 프로그램이 있어야합니다 - 당신은 첫 번째를 포함하는 일반 응용 프로그램을 만들고, 가게에서 다운로드 할 앱 정보를 만들 수 없습니다 추가 앱 정보 이 데모에서는 새 단일 뷰 프로젝트를 만들고 그대로 둡니다. 파일 -> 신규 -> 프로젝트으로 이동하여 단일보기 응용 프로그램아래에서 iOS -> Applications을 'ExtendableApp'라고 부릅니다. 파일 -> 새로 만들기로

  2. 이동> 대상 및 아이폰 OS에서 공유 확장를 선택 -> 응용 프로그램 확장이 프로젝트에 공유 확장 대상을 추가 할 것 'myShareExtension'를 호출.

  3. ShareViewController는 Textbox, imageview 및 '취소'와 '게시'버튼과 문자 수, 구성, 내용 유효성 검사와 같은 다른 기능이있는보기가있는 SLComposeServiceViewController에서 상속합니다.

    ShareViewController를 설정하여 UIViewController에서 상속하도록 설정하면 확장이 활성화되면 모든 일반 viewDidLoad, viewDidAppear 등이 호출됩니다. 이미

    이 viewDidAppear에 ShareViewController.mm에서 사용하는 다음을 공유있는 UIImage

    받기 UIActivityViewController 메뉴에서 'myShareExtension'을 볼 수에 의해됩니다 포함 된 응용 프로그램을 설치 한 후이 시점에서

이 코드는 악마만을위한 것입니다 -

-(void)viewDidAppear:(BOOL)animated 
{ 
    for (NSItemProvider* itemProvider in ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments) 
    { 
     if([itemProvider hasItemConformingToTypeIdentifier:@"public.image"]) 
     { 
      [itemProvider loadItemForTypeIdentifier:@"public.image" options:nil completionHandler: 
       ^(id<NSSecureCoding> item, NSError *error) 
       { 
        UIImage *sharedImage = nil; 
        if([(NSObject*)item isKindOfClass:[NSURL class]]) 
        { 
         sharedImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:(NSURL*)item]]; 
        } 
        if([(NSObject*)item isKindOfClass:[UIImage class]]) 
        { 
         sharedImage = (UIImage*)item; 
        } 
       }]; 
     } 
    } 
} 

참고 이미지를 얻을 수 있습니다 확장 기능은 빠르고 가볍고 이미지를로드하는 동안 UI 스레드를 차단하지 않아야하며, 실제 응용 프로그램에서는 백그라운드에서이 작업을 수행해야합니다. UIActivityViewController 메뉴가 나타납니다 때마다 확장이 확장은 확장 정보에 적절한 값을 설정해야 표시해야하는 상황에서 지정, 확장은 이제 표시됩니다 기본적으로

을 표시 할 때

을 지정합니다.현재 사용 가능한 키의 decumentation 찾을 수 NSExtension, NSExtensionAttributes, NSExtensionActivationRule 아래의 plist : 키의 모든 적용 할 때마다 확장이 표시에 대한 기본 동작입니다 Information Property List Key Reference

참고 것을 의미하면 경우 NSExtensionActivationSupportsImageWithMaxCountNSExtensionActivationSupportsMovieWithMaxCount을 지정하면 사용자가 이미지 동영상이 이미지 또는 동영상이 아닌 이미지를 공유하는 경우에만 확장 프로그램이 나타납니다. 는

http://bryan.io/post/97658826431/what-we-learned-building-the-tumblr-ios-share-extension

Declaring Supported Data Types for a Share or Action Extension

+1

나는 이미지와 모든 것을 얻었다. 이제 백그라운드에서 이미지를 공유해야합니다. 이 코드를 제공 할 수 있습니까? – TamilKing

+0

내가 이해하지 못한다. 질문에서 공유 확장을 개발하고있는 것처럼 보이는데, 왜 당신과 이미 공유 된 이미지를 공유하고 싶습니까? 컨텍스트에 관계없이 공유 확장을 사용하는 유일한 방법은 UIActivityViewController를 사용하는 것이며이 컨트롤러를 제시해야만 백그라운드에서 수행 할 수 없습니다. – MichaelB

+0

나는 모든 것을 추가하고 또한 공유하고있다. .. 공유하지 않는 약간의 시간. 나는 이미지를 업로드하기 위해 두 개의 API를 호출해야한다. 백그라운드 세션에서 실수를 저 지르지 않았 으면합니다. – TamilKing