[英]How to avoid losing image quality using UIImageView's contentmode UIViewContentModeScaleAspectFit keeping height constant?
[英]Fit image in UIImageView using UIViewContentModeScaleAspectFit
我面临UIImageView的一个非常奇怪的问题,我试图将图像(通过获取当前视图的屏幕快照创建)设置为具有内容模式的ImageView,即UIViewContentModeScaleAspectFit。
当我通过界面构建器在xib文件中设置图像或设置由[UIImage imageNamed:]创建的图像时,效果很好。 他们都可以与UIViewContentModeScaleAspectFit一起正常工作。
但是,当我拍摄视图快照并将图像设置为图像视图时,图像不适合UIImageView。 我已经尝试过在这里找到的所有解决方案,例如.ClipsToBound = YES,但是它们根本没有用。 现在我真的很困惑。
这是我拍摄屏幕快照并创建UIImage时的代码:
- (UIImage *)screenshotWithRect:(CGRect)captureRect
{
CGFloat scale = [[UIScreen mainScreen] scale];
UIImage *screenshot;
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, scale);
CGContextClipToRect (UIGraphicsGetCurrentContext(),captureRect);
{
if(UIGraphicsGetCurrentContext() == nil)
{
NSLog(@"UIGraphicsGetCurrentContext is nil. You may have a UIView (%@) with no really frame (%@)", [self class], NSStringFromCGRect(self.frame));
}
else
{
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
screenshot = UIGraphicsGetImageFromCurrentImageContext();
}
}
UIGraphicsEndImageContext();
return screenshot;
}
当我将图像设置为图像视图时
UIImage* snap = [[UIImage alloc] init];
// start snap shot
UIView* superView = [self.view superview];
CGRect cutRect = [superView convertRect:self.cutView.frame fromView:_viewToCut];
snap = [superView screenshotWithRect:cutRect];
[self.view addSubview:self.editCutFrameView];
// end snap shot -> show edit view
[self.editCutFrameView setImage:snap];
非常感谢您的帮助。
更新 :正如@Saheb Roy提到的大小一样,我检查了图像大小,它约为400x500px,thumbnail.png的大小为512x512px,所以我认为这与图像的大小无关。
这是因为在第二种情况下,快照映像本身就是您所看到的大小 。 因此,图像不会被相应地拉伸或拟合。 较早的图像适合显示在屏幕上,因为图像大于图像imageview
但比率与图像不同或相同。
但是不适合imageview
的图像本身具有如此大的尺寸,即小于imageview的尺寸,因此它不适合边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.