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.
当您使用 .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.