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

tvOS adjustsImageWhenAncestorFocused crops image collection view cell

当您使用 .imageView.adjustsImageWhenAncestorFocused 时,您的图像会缩放,焦点会变大。图像超出了它的范围。这意味着您无法看到完整的图像 - 它的各个面都被处理了。

你有:

你想要:

如果您希望它开箱即用,您需要记住在创建图像时保留 Focused/Safe 区域大小(来自文档)。

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

    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.