개발

iOS Widget Extension에서 URL 이미지 로딩 방법!?

소소ing 2020. 11. 19. 18:20
반응형

해당 글에서 코드 부분은 파란색으로 표기 됩니다.

해당 글에서 중요 부분은 붉은색으로 표기 됩니다.

 

 

iOS Widget Extension에 대한 기본 정보는 아래 링크에서 확인이 가능하다.

Widget Extension에 대한 전반적인 기본 정보를 알고 싶을 경우 아래 글이 도움이 될듯 하다.

 

iOS Widget 구성을 위한 Widget Extension 기본부분 살펴보기

해당 글에서 코드 부분은 파란색으로 표기 됩니다. 해당 글에서 중요 부분은 붉은색으로 표기 됩니다. ​ iOS14 에서 새롭게 추가된 Widget을 구성하려면 Widget Extension을 구성하여야 한다. 새롭게

sosoingkr.tistory.com

iOS Widget Extension에서 Button 액션과 같이 특정 영역에 다른 동작을 주려면 아래 글을 참고

 

iOS Widget Extension 각 항목별 터치 이벤트 구성하기

해당 글에서 코드 부분은 파란색으로 표기 됩니다. 해당 글에서 중요 부분은 붉은색으로 표기 됩니다. iOS Widget Extension에 대한 기본 정보는 아래 링크에서 확인이 가능하다. Widget Extension에 대한

sosoingkr.tistory.com

 

그럼 여기에서는 Widget Extension에서 서버 통신 후 받은 이미지 URL을 표시하는 방법에 대해 알아보자!

Apple WidgetKit을 통해 Widget Extension을 구성하는 경우 공식적으로 비동기 처리에 대한 지원을 하지 않는것으로 나와 있다.

 

그럼 URL 이미지를 표기 하기 위해서는 어떻게 해야 할까?

크게 두가지 방법이 있다. 

 

1. 화면을 그리기 전에 요청되는 TimelineProvider에서 이미지를 내려받아 내려받은 이미지를 TimeLineEntry로 전달하여 공유하는 방법이다. 

2. 아래의 함수를 구성하여 동기적으로 이미지를 받아와 처리하는 방법이 있다. 

struct NetworkImage: View {
  private let url: URL?
  var body: some View {
    Group {
     if let url = url, let imageData = try? Data(contentsOf: url), 
       let uiImage = UIImage(data: imageData) {

       // 추가적인 이미지 처리는 여기서 가능하다.
       Image(uiImage: uiImage)
      } 
      else {

       // 추가적인 이미지 처리는 여기서 가능하다.
       Image("placeholder-image")
      }
    }
  }
}

 

 

[내용 출처]

 

iOS WidgetKit: remote images fails to load

I'm observing a bizarre thing: in the new widgets far too often remote images are not being displayed even though the image has been successfully loaded and placed in cache. For image downloading I...

stackoverflow.com

 

반응형