ios - 使用 drawInRect 时 UIImage Aspect Fit?

标签 ios uiimage

UIView 提供“纵横比”内容模式。但是,我已经对 UIView 进行了子类化,并且想使用 drawInRect 绘制一个 UIImage 并进行纵横比调整。有没有什么方法可以让我在不使用 UIImageView 的情况下访问该功能?

最佳答案

这方面的数学有点复杂,但幸运的是,这是我之前准备的解决方案:

- (UIImage *)imageScaledToSize:(CGSize)size
{
    //create drawing context
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);

    //draw
    [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];

    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

- (UIImage *)imageScaledToFitSize:(CGSize)size
{
    //calculate rect
    CGFloat aspect = self.size.width / self.size.height;
    if (size.width / aspect <= size.height)
    {
        return [self imageScaledToSize:CGSizeMake(size.width, size.width / aspect)];
    }
    else
    {
        return [self imageScaledToSize:CGSizeMake(size.height * aspect, size.height)];
    }
}

第一个函数相当于“缩放以填充”,第二个(调用第一个)相当于“纵横比”。这些方法是作为 UIImage 上的一个类别编写的,因此要在另一个类中使用它们,您需要通过将图像作为第二个参数传入来调整它们(或者像我一样在 UIImage 上创建一个类别)。

关于ios - 使用 drawInRect 时 UIImage Aspect Fit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858404/

相关文章:

ios - 跨多个 Controller 更新对象/模型

iphone - 如何添加带有 presentmodalview 类型动画的 subview ?

ios - UITabBarItem setFinishedSelectedImage : deprecated in iOS7

ios - 如何在iOS 6/7中将图像保存到相机胶卷/相册?

ios - 从 ALAssetRepresentation 获取 "retouched"图像

ios - 如何在 iOS 应用程序中获取手机 IP 地址

iOS - 使用方向 URL 方案启动 Yandex map

iOS 库找不到标题

ios - 使用 resizableImageWithCapInsets 崩溃 :UIEdgeInsetsMake

ios - UIImage 到 NSData fatal error : unexpectedly found nil while unwrapping an Optional value