4

MPNowPlayingInfoCenter의 MPMediaItemArtwork을 설정하기 위해 찾은 모든 방법은 로컬 이미지를 사용합니다. MPMediaItemArtwork * albumArt = [[MPMediaItemArtwork alloc] initWithImage : [UIImage imageNamed : @ "myimage"];MPNowPlayingInfoCenter : Url에서 MPMediaItemArtwork를 설정하는 가장 좋은 방법은 무엇입니까?

그러나 나는 이미지 URL 현재 내가 이것을 사용

에서이를 설정할 필요가 ...

UIImage *artworkImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:self.currentTrack.imageUrl]]]; 

    MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: artworkImage]; 
    [self.payingInfoCenter setValue:albumArt forKey:MPMediaItemPropertyArtwork]; 

어떤 생각? 내 최고의 솔루션입니다

+0

3 트랙에서 작동하고 충돌이 발생했다고 말하는가? 당신이 그것을 바꿀 때마다'artworkImage'가'nil'이 아니라는 점을 확인 했습니까? – sooper

+0

죄송합니다. 이미지가없는 객체였습니다 ... 충돌 ... 잠시 비동기 블록을 사용합니다. 나는 괜찮다고 생각한다 –

답변

4

:

- (void)updateControlCenterImage:(NSURL *)imageUrl 
{  
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(queue, ^{ 

      NSMutableDictionary *songInfo = [NSMutableDictionary dictionary]; 
      UIImage *artworkImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]]; 
      if(artworkImage) 
      { 
       MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: artworkImage]; 
       [songInfo setValue:albumArt forKey:MPMediaItemPropertyArtwork]; 
      } 
      MPNowPlayingInfoCenter *infoCenter = [MPNowPlayingInfoCenter defaultCenter]; 
      infoCenter.nowPlayingInfo = songInfo; 
    }); 
} 

/\ 이미 MPNowPlayingInfoCenter을 살고 있고 한 경우, 그것을 얻을 또는 다른 모든 값은 무시됩니다 아이폰 OS에 나를 위해 일한

+0

죄송합니다 - 이것은 나에게 효과가있는 것 같지 않습니다. 왠지 나는 현재 재생중인 비디오의 제목을 바꾼 단 하나의 바보 같은 링크 만 볼 수 있습니다.이 코드는 내가 설정하지 않은 코드와 소개 한 속성이없는 코드 샘플을 따릅니다. 이것이 일어날 수있는 이유는 무엇입니까? –

+0

미안 해요 @MottiShneor 그것은 오래 전 이었지만 지금은 프로젝트가 공개되었습니다. https://github.com/whyd/openwhyd-ios –

+0

이 대답의 MPMediaItemArtwork init 함수는 더 이상 사용되지 않습니다. 나는 다음과 같이 대답을 업데이트 할 것을 제안한다 : '[[MPMediaItemArtwork alloc] initWithBoundsSize : theImage.size requestHandler :^UIImage * _Nonnull (CGSize aSize) {return theImage; }];' – Shackleford

0
let mpic = MPNowPlayingInfoCenter.default() 
DispatchQueue.global().async { 

      if let urlString = yourUrlString, let url = URL(string:urlString) { 
       if let data = try? Data.init(contentsOf: url), let image = UIImage(data: data) { 

        let artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: { (_ size : CGSize) -> UIImage in 

         return image 

        }) 


        DispatchQueue.main.async { 
         mpic.nowPlayingInfo = [ 
          MPMediaItemPropertyTitle:"Title", 
          MPMediaItemPropertyArtist:"Artist", 
          MPMediaItemPropertyArtwork:artwork 
         ] 
        } 
       } 
      } 
     } 

! 11, swift 4