UIImageView 查找超出范围的数量
Posted
技术标签:
【中文标题】UIImageView 查找超出范围的数量【英文标题】:UIImageView finding how much is out of bounds 【发布时间】:2013-05-09 14:32:30 【问题描述】:我正在使用 UIImageView 缩放图像:UIViewContentModeScaleAspectFill
图像可以很好地缩放,但我的问题是 ImageView 位于 UIScrollView 中,我已将原点设置为 0,0。这对于我正在使用的大多数图像来说都很好,但有些图像的高度更高并且超出了界限。我不想修剪图像,我想根据超出范围的数量在 Y 轴上动态地将 UIImageView 框架向下推。
我怎样才能找出 Y 轴/高度上超出范围的内容?请原谅糟糕的代码示例。
NSString *ImageURL = [self.detailItem objectForKey:@"job_header"];
anImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, MAX_HEIGHT, 118)];
anImage.contentMode = UIViewContentModeScaleAspectFill;
[anImage setImageWithURL:[NSURL URLWithString:ImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
//Adjust the frame once the image is loaded
[self adjustPositions];
];
在adjustPosition内:
if (anImage.image.size.height > MAX_HEIGHT)
CGRect myFrame = anImage.frame;
myFrame.origin.y = 100;
myFrame.origin.y = anImage.frame.size.height / anImage.image.size.height;
anImage.frame = myFrame;
我也在使用:SDWebImage,这是 Q 相关的,可以更好地解释我的问题:UIImageView, setClipsToBounds and how my images are losing their head
请注意,我根本不想剪裁边界。我想保留边界并将原点移动到真正的 (0,0) 位置。
【问题讨论】:
【参考方案1】:这是一种可以计算图像视图中图像大小的方法。 originalSize 是图像的大小,constraint 是图像视图的大小。
- (CGSize) size: (CGSize) originalSize constrainedToSize: (CGSize) constraint
CGFloat ratioOriginal = originalSize.width/originalSize.height;
CGFloat ratioConstraint = constraint.width/constraint.height;
CGSize resultingSize = CGSizeZero;
if (ratioConstraint >= ratioOriginal)
resultingSize = CGSizeMake(constraint.width, originalSize.height*constraint.width/originalSize.width);
else
resultingSize = CGSizeMake(constraint.height*originalSize.width/originalSize.height, constraint.height);
return resultingSize;
通过图像视图中的图像大小,您可以计算出图像有多少超出范围。
【讨论】:
关闭但没有雪茄,我现在遇到的问题是差距比预期的要大。因此,我将图像帧 origin.y 移动了 resultSize.height。我发现差距太大,所以我认为边界可能均匀分布在顶部/底部。将结果除以 2 后,我离得更近了一点,但图像仍然在顶部吃掉了一小部分。我的目标是0,0。但显然图像边界造成了困难。我想知道我是否应该放弃并使用适当的图像缩放库,它不会有任何越界...... 我能够实现合理的比例调整大小,同时仍然使用 SDWebImage 的异步/缓存功能,并具有以下功能:github.com/toptierlabs/ImageCacheResize 我遇到的唯一问题是它使用的是旧版本,而不是维护,但它确实有效。以上是关于UIImageView 查找超出范围的数量的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围