【问题标题】:Xcode: why does Xcode shows an image bigger then AS-IS?Xcode:为什么 Xcode 显示的图像比原样大?
【发布时间】:2017-08-21 10:48:18
【问题描述】:

为什么 Xcode 显示的图像比原样大?

http://users.telenet.be/thomazz/ScreenShot4.png

http://users.telenet.be/thomazz/ScreenShot3.png

场景:

  1. 我得到了一张图片。
  2. 我调整了这个 UIImage 的大小。
  3. 我导出调整大小的 UIImage。
  4. 我注释掉我的调整大小代码。
  5. 我在 Xcode 中导入调整大小的图像。
  6. 问题 1:Xcode 显示的图像是正常大小的两倍。
  7. 问题 2:当我使用导出后调整大小的图像运行我的应用程序时,它是原来的两倍。

查看屏幕截图。

【问题讨论】:

    标签: ios xcode image ios10 google-maps-sdk-ios


    【解决方案1】:

    这完全取决于你的 UIImageView 的框架,而不是它的尺寸。

    因此,如果您有一个 1024x1024 的图像并将其放置在 10x10 的帧中,它将渲染为 10x10 大小,反之亦然。

    如果你想让它更大,那就让你的 UIImageView 更大

    编辑:所以它是一个谷歌地图图标

    将调整大小的图像设置为标记图标,即

    marker.icon = self.imageWithImage(image: UIImage(named: "imageName")!, scaledToSize: CGSize(width: 3.0, height: 3.0))
    

    添加此功能

    func imageWithImage(image:UIImage, scaledToSize newSize:CGSize) -> UIImage{
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0);
        image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
        let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }
    

    【讨论】:

    • 我没有相框。我正在使用 google-maps-ios-sdk。我所做的是:GMSMarker.icon = UIImage.
    • 让marker = GMSMarker();让 image = UIImage(named: "marker_77.png")!; marker.icon = 图像;
    • 我编辑了我的答案。请检查它并告诉我它是否有效
    • thnx,我确定您的新代码可以正常工作,但我要避免的是这种“返回 newImage”。所以我要做的就是调用这个:UIImagePNGRepresentation(resizedImage)。然后使用这个导出的图像。所以我没有“返回 NEW 图片”
    【解决方案2】:

    亲爱的 Mohammad Bashir Sidani,我有这个密码。 这段代码有效。但它会创建一个新的 UIImage。 然后我使用 UIImagePNGRepresentation(resizedImage) 导出图像。 我禁用下面的代码以使用“以编程方式调整大小的图像”。 这个新的调整大小的图像被 Xcode 炸毁了...... :(

    extension UIImage {
        func resizeImage(_ dimension: CGFloat, opaque: Bool, contentMode: UIViewContentMode = .scaleAspectFit) -> UIImage {
            var width: CGFloat
            var height: CGFloat
            var newImage: UIImage
            
            let size = self.size
            let aspectRatio =  size.width/size.height
            
            switch contentMode {
            case .scaleAspectFit:
                if aspectRatio > 1 {                            // Landscape image
                    width = dimension
                    height = dimension / aspectRatio
                } else {                                        // Portrait image
                    height = dimension
                    width = dimension * aspectRatio
                }
                
            default:
                fatalError("UIIMage.resizeToFit(): FATAL: Unimplemented ContentMode")
            }
            
            if #available(iOS 10.0, *) {
                let renderFormat = UIGraphicsImageRendererFormat.default()
                renderFormat.opaque = opaque
                let renderer = UIGraphicsImageRenderer(size: CGSize(width: width, height: height), format: renderFormat)
                newImage = renderer.image {
                    (context) in
                    self.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
                }
            } else {
                UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), opaque, 0)
                self.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
                newImage = UIGraphicsGetImageFromCurrentImageContext()!
                UIGraphicsEndImageContext()
            }
            
            return newImage
        }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2018-05-23
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多