0

문서에 따르면 [UIActivityItemProvider item]은 보조 스레드에서 실행됩니다. 이것은 UI를 잠글 때 좋지 않지만, 예를 들어 Mail 작성 화면과 같이 item이 표시 될 때까지는 완료되지 않는 것으로 나타났습니다.UIActivityViewController가 제공 할 때 UIActivityItemProvider의 항목을 준비하는 방법은 무엇입니까?

NSURL을 반환하기 위해 UIImage를 생성하여 디스크에 저장하고 있습니다. 더 오래 실행되는 이미지 생성 작업에서는 사용자에게 표시 될 때까지 완료되지 않습니다. 나는 주 스레드에 강제로 시도했지만 여전히 발생합니다.

item을 어떻게 확인할 수 있습니까?

답변

1

파일의 빌드가 완료 될 때까지 항목 반환을 유지하기 위해 boolean을 사용하여이 작업을 수행 할 수 있습니다. 진행 상황을 보거나 기본보기에 활동 표시기를 표시하려면 주 스레드에서 호출하여이 작업을 수행 할 수 있습니다. 다음은 작동중인 코드 스 니펫입니다.

진행 뷰를로드하려면이 기능으로 제공자의 활동보기 컨트롤러를 설정하십시오.

self.parentViewController = parentVc; 

다음은 차단 및 피드백보기로드가있는 항목 기능입니다. 파일의 완료를 기다리는 동안

self.wait = true; 

[self prepareFile:^(){ 
    [self performSelectorOnMainThread:@selector(dismissProgressView) 
            withObject:nil waitUntilDone:NO]; 
}]; 

[self performSelectorOnMainThread:@selector(loadProgressView) 
            withObject:nil waitUntilDone:NO]; 

while (self.wait) { 
    [self performSelectorOnMainThread:@selector(updateProgressView) 
             withObject:nil waitUntilDone:NO]; 
} 

return self.completedUrl; 

당신은 다음 진행보기를 진행보기를 보여 주 스레드에서 호출되는 세 가지 함수를 만들 업데이트 할 수 있습니다. dismissProgressView 함수의 구현에서 dismissViewController가 완료되면 wait boolean을 false로 설정해야합니다.