Appleは、iOS10のMPMediaItemArtwork
のinit(image:)
メソッドを非推奨にしました。新しい代替手段は何ですか。
クラスshowsinterfaceは、新しいOSバージョンで使用できる以下のメソッドを示しています
public init(boundsSize: CGSize, requestHandler: @escaping (CGSize) -> UIImage)
誰もがそれを使用する方法を知っていますか?
また、前の質問の一部である質問2:MPNowPlayingInfoCenter
を使用してロック画面とコントロールセンターに現在再生中メタデータを表示することはシミュレーターで機能しますか?
次のコードを使用できます。
let image = UIImage(named: "logo")!
let artwork = MPMediaItemArtwork.init(boundsSize: image.size, requestHandler: { (size) -> UIImage in
return image
})
そして、はい、「再生中」のメタデータがシミュレーターのコントロールセンターに表示されます。
私は同じことを不思議に思っていて、これについてのAppleの説明を見つけることになった。
彼らは、ハンドラーが要求されたときに画像に対して高価なサイズ変更操作を行うべきではなく、代わりに、すでに利用可能な画像から厳密に一致する画像を返すだけでよいと言っています。
次のWWDC2017ビデオは、彼らが言及しているところです。 tvOSについてですが、少なくともいくつかの洞察を得ることができます。 07:20に開始: https://developer.Apple.com/videos/play/wwdc2017/251/?time=44
私はこれをちょうど今見ました、そして私も混乱しています、しかし私はこれが正しい方法であると思います:
self.remoteArtwork = [[MPMediaItemArtwork alloc] initWithBoundsSize:CGSizeMake(600, 600) requestHandler:^UIImage * _Nonnull(CGSize size) {
UIImage *lockScreenArtworkApp = [UIImage imageNamed:@"lockScreenLogo"];
return [self.manager resizeImageWithImage:lockScreenArtworkApp scaledToSize:size];
}];
メソッド-私の場合はシングルトン「マネージャー」-クラス
- (UIImage *)resizeImageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
最小コード:
MPMediaItemArtwork(boundsSize: image.size) { _ in image }