当前位置 : 主页 > 手机开发 > 其它 >

swift – AppleTv / TvOS – 调整TVContentItems中保存到ImageURL的TopShelf图像

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在Apple tvOS中实现TopShelf.我已下载图像并分配给TVContentItems的imageURL.下载的图像宽高比不适合TopShelf图像.我试图通过将宽度高度附加到图像链接来更改大小. www.mydownloadedimages.com/{wid
我正在Apple tvOS中实现TopShelf.我已下载图像并分配给TVContentItems的imageURL.下载的图像宽高比不适合TopShelf图像.我试图通过将宽度高度附加到图像链接来更改大小.

www.mydownloadedimages.com/{width}x{height}

但它没有用.

我可以以任何其他方式在客户端调整大小.在TVContentItem类中,我只有NSURL对象.没有UIImage对象.

非常感谢.

这是Apple关于图像尺寸和形状的文档

// ~ 2 : 3
// ~ 1 : 1
// ~ 4 : 3
// ~ 16 : 9
// ~ 8 : 3
// ~ 87 : 28


 //@property imageShape
 //@abstract A TVContentItemImageShape value describing the intended aspect ratio or shape of the image.
 //@discussion  For Top Shelf purposes: the subset of values which are //valid in this property, for TVContentItems in the topShelfItems property //of the TVTopShelfProvider, depends on the value of the topShelfStyle //property of the TVTopShelfProvider:


                    TVTopShelfContentStyleInset:

                        valid: TVContentItemImageShapeExtraWide

                    TVTopShelfContentStyleSectioned:

                        valid: TVContentItemImageShapePoster

                        valid: TVContentItemImageShapeSquare

                        valid: TVContentItemImageShapeHDTV

当此属性的值对Top Shelf样式无效时,系统保留以任何方式缩放图像的权限.

你说TVContentItem没有UIImage类型属性是对的.由于TVContentItem还接受imageURL属性中的本地文件URL,因此解决方法可以是:

>从互联网上抓取UIImage
>使用顶部货架图像的大小创建新的图像上下文
>将其保存到NSCacheDirectory中
>将本地图像URL设置为imageURL.

以下是步骤:

>让我们创建我们的TVContentItem对象:

let identifier = TVContentIdentifier(identifier: "myPicture", container: wrapperID)!
let contentItem = TVContentItem(contentIdentifier: identifier )!

>设置contentItem的imageShape:

contentItem.imageShape = .HDTV

>从互联网上抓取图像.实际上我同步这样做,你也可以尝试使用其他异步方法来获取它(NSURLConnection,AFNetworking等…):

let data : NSData = NSData(contentsOfURL: NSURL(string: "https://s3-ak.buzzfed.com/static/2014-07/16/9/enhanced/webdr08/edit-14118-1405517808-7.jpg")!)!

>准备保存图像的路径并从数据对象获取UIImage:

let filename = "picture-test.jpg"
let paths = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)
let filepath = paths.first! + "/" + filename
let img : UIImage = UIImage(data: data)!

>假设您已经设置了topShelfStyle属性,请使用TVTopShelfImageSizeForShape方法获取顶层图像的大小.这将是您的图像上下文的大小:

let shapeSize : CGSize = TVTopShelfImageSizeForShape(contentItem.imageShape, self.topShelfStyle)

>创建shapeSize大小的图像上下文,并将下载的图像绘制到上下文rect中.在这里,您可以对图像进行所有修改,将其调整为所需的大小.在这个例子中,我从Instagram拍摄了一张方形图像,并在左右两侧放置了白色信箱带.

UIGraphicsBeginImageContext(shapeSize)
let imageShapeInRect : CGRect = CGRectMake((shapeSize.width-shapeSize.height)/2,0,shapeSize.height,shapeSize.height)
img.drawInRect(imageShapeInRect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

>最后,将此图像保存到NSCacheDirectory中,并将图像路径设置为contentItem的imageURL.

UIImageJPEGRepresentation(newImage, 0.8)!.writeToFile(filepath, atomically: true)
contentItem.imageURL = NSURL(fileURLWithPath: filepath)

>使用其他详细信息(如标题,内部链接等)完成您的TVContentItem,运行顶部的扩展架…etvoilà!
tvOS Screenshot

网友评论