我正面临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所以我认为& #39;与图像的大小无关。
答案 0 :(得分:0)
这是因为在第二种情况下,快照图像本身正是您所看到的那个尺寸。因此,图像没有被拉伸或相应地适合。
由于图像大于imageview
但图像的比例不同或相同,因此较早的图像会相应地适合屏幕。
但是它不适合imageview
的那个,图像本身的尺寸很大,即小于图像视图的尺寸,因此它不适合边界。