UIImage 调整大小后居中

发布于 2024-11-01 21:41:45 字数 609 浏览 1 评论 0原文

iPhone应用程序的代码:

+(UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
  UIGraphicsBeginImageContext(newSize);
  [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
  UIGraphicsEndImageContext();
  return newImage;
}

CGSize sz = CGSizeMake( 200, 20 );
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.image = [Class imageWithImage: [UIImage imageNamed:@"image.png"] scaledToSize: sz];

调整大小的图像在imageView中居中,我希望它左对齐(最好是左上角)。我怎样才能实现这个目标?感谢您的任何帮助。

Code for iPhone app:

+(UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
  UIGraphicsBeginImageContext(newSize);
  [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
  UIGraphicsEndImageContext();
  return newImage;
}

CGSize sz = CGSizeMake( 200, 20 );
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.image = [Class imageWithImage: [UIImage imageNamed:@"image.png"] scaledToSize: sz];

The resized image is centred in imageView, I would like it to be left aligned (preferably top-left). How can I achieve this? Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野侃 2024-11-08 21:41:45

如果您将 imageView 设置为内容模式 UIViewContentModeScaleAspectFit,iOS 将适合您的图像,但如果适合的宽度小于您的宽度,它也会在左侧和右侧引入透明条。

解决方案是让iOS适应图像,然后计算出新的宽度并用新的宽度设置imageView的宽度。

    CGSize imgSize = contentProvider.image.size;
    CGRect frame = contentProviderViewOriginalFrame;

    if (imgSize.width > 0 && imgSize.height > 0)
    {
        double aspectRatio = (imgSize.width * 1.0) / (imgSize.height * 1.0);
        CGFloat newWidth = frame.size.height * aspectRatio;

        if (newWidth < frame.size.width)
        {
            frame.size.width = newWidth;
        }
    }

If you have set your imageView to have the content mode UIViewContentModeScaleAspectFit, iOS will fit your image but it will also introduce transparent bars to the left and right if the fit is smaller than your width.

The solution is to let iOS fit the image, then figure out the new width and set the imageView's width with the new width.

    CGSize imgSize = contentProvider.image.size;
    CGRect frame = contentProviderViewOriginalFrame;

    if (imgSize.width > 0 && imgSize.height > 0)
    {
        double aspectRatio = (imgSize.width * 1.0) / (imgSize.height * 1.0);
        CGFloat newWidth = frame.size.height * aspectRatio;

        if (newWidth < frame.size.width)
        {
            frame.size.width = newWidth;
        }
    }
十六岁半 2024-11-08 21:41:45

将内容模式更改为:

imageView.contentMode = UIViewContentModeTopLeft;

Change the contentMode to:

imageView.contentMode = UIViewContentModeTopLeft;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文