tvOS adjustsImageWhenAncestorFocused 裁剪图像收集视图单元格

Posted

技术标签:

【中文标题】tvOS adjustsImageWhenAncestorFocused 裁剪图像收集视图单元格【英文标题】:tvOS adjustsImageWhenAncestorFocused crops image collection view cell 【发布时间】:2016-05-16 11:32:33 【问题描述】:

当您使用.imageView.adjustsImageWhenAncestorFocused 时,您的图像会被缩放,焦点会变得更大。图像超出了它的界限。这意味着您看不到完整的图像 - 它的各个方面都得到了应对。

你有:

你想要:

【问题讨论】:

我在 tvOS 应用程序中遇到了同样的问题。如果图像尺寸不是 16:9 比例,则焦点图像无法正确显示并且图像被裁剪。 你能解决这个问题吗? @vipulk617 请阅读我的回答。 @vipulk617 link 【参考方案1】:

如果您希望它直接使用,则需要记住在创建图像时保留重点/安全区域大小(来自文档)。

就我而言,我有来自服务器的图像,但我无法编辑它们。 什么对我有用 - 它是在设置之前重绘图像:

    UIImage *oldImage = [UIImage imageNamed:@"example"];
    CGFloat width = cell.imageView.frame.size.width;
    CGFloat height = cell.imageView.frame.size.height;
    CGSize newSize = CGSizeMake(width, height);
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGImageRef imageRef = oldImage.CGImage;

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
    CGContextRef resizeContext = UIGraphicsGetCurrentContext();

    CGContextSetInterpolationQuality(resizeContext, kCGInterpolationHigh);
    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height);

    CGContextConcatCTM(resizeContext, flipVertical);
    CGContextDrawImage(resizeContext, newRect, imageRef);

    CGImageRef newImageRef = CGBitmapContextCreateImage(resizeContext);
    UIImage *newImageResized = [UIImage imageWithCGImage:newImageRef];

    CGImageRelease(newImageRef);
    UIGraphicsEndImageContext();
    dispatch_async(dispatch_get_main_queue(), ^
        cell.imageView.image = newImageResized;
    );

这种方式也不需要重绘,关键是你需要重新绘制UIImage才能让你的图片正常显示。

来自here的代码。

【讨论】:

什么时候重新绘制它们?如果您在焦点上动态应用此代码,是否存在性能问题?

以上是关于tvOS adjustsImageWhenAncestorFocused 裁剪图像收集视图单元格的主要内容,如果未能解决你的问题,请参考以下文章

tvOS 11 更新 UICollectionView 崩溃

归档 tvOS 应用

tvOS - 替换 UISlider

tvOS 上的 iCloud 同步

tvOS 11 显示问题

如何上传通用 tvOS 应用程序?