Swift - 将文本添加到可调整大小的图像中

Mic*_*use 3 iphone xcode ios swift

我一直在研究如何在资产目录中实现可调整大小的图像的不同技术,但是没有关于如何在Swift中为这些可调整大小的图像添加文本的例子(即使在Apple自己的指南中)并且允许它们动态调整大小.

如果有人知道如何做到这一点,知道链接到博客解释,这将是有帮助的.

cle*_*ght 5

UIImage类通过约束或框架将图像缩放到您设置的尺寸,具体取决于您放置材料的方式.如您所知,您可以通过名称从资产目录中加载图像.

所以只需将设备类的所有分辨率上的图像上传到资产目录(例如1x,2x,3x ......)然后创建一个UIImage()并在它是子视图后设置UIImage实例的框架,然后在那里你走.iOS将根据您拥有的设备/屏幕选择正确的图像大小,以及为缩放图像获得良好分辨率所能做到的.

默认情况下,您将使用约束来在Interface Builder中调整UIImage的大小.如果以编程方式创建图像,您将获得更多灵活性,但在将UIImage放入超视图后如何调整UIImage的大小.

以下是一些扩展UIImage的代码.获得图像的位图上下文后,如下面的函数所示,您可以使用其他绘图和字体函数以及派生的上下文句柄来添加文本.当您搜索核心图像和核心文本类时,您会注意到转换选项以及操作和添加文本以及执行各种图像处理的方式.

func scaleImage(image: UIImage, newSize: CGSize) -> UIImage {
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
    var colorSpace = CGColorSpaceCreateDeviceRGB()
    var bytesPerRow = CGImageGetBytesPerRow(image.CGImage)
    var ctx = CGBitmapContextCreate(nil,
                     UInt(newSize.width),
                     UInt(newSize.height),
                     CGImageGetBitsPerComponent(image.CGImage),
                     UInt(newSize.width * 4),
                     colorSpace,
                     bitmapInfo)!
    CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh)
    CGContextDrawImage(ctx, CGRect(origin: CGPointZero, size: CGSizeMake(newSize.width, newSize.height)), image.CGImage)
    return UIImage(CGImage: CGBitmapContextCreateImage(ctx))!
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过编程方式拍摄快照,将标签转换为图像,如下所示:

    func takeSnapshot(view: UIView) -> UIImageView {
        var image : UIImage
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
        view.layer.renderInContext(UIGraphicsGetCurrentContext())
        image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();
        var imageView = UIImageView(image: image)
        imageView.opaque = false
        return imageView
    }
Run Code Online (Sandbox Code Playgroud)

并将一个图像叠加在另一个上,如下所示:

func overlayImages(images: [UIImage]) -> UIImage? {
    var compositeImage : UIImage?
     if images.count > 0 {
        var maxWidth = CGFloat(0), maxHeight = CGFloat(0)
        for image in images {
            if image.size.width > maxWidth {
                maxWidth = image.size.width
            }
            if image.size.height > maxHeight {
                maxHeight = image.size.height
            }
        }
        var size = CGSizeMake(maxWidth, maxHeight)
        UIGraphicsBeginImageContext(size);
        for image in images {
            var x = maxWidth / 2 - image.size.width / 2
            var y = maxHeight / 2 - image.size.height / 2
            image.drawInRect(CGRectMake(x, y, image.size.width, image.size.height))
        }
        compositeImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    return compositeImage;

}
Run Code Online (Sandbox Code Playgroud)

您也可以继承您的UIImageView()并覆盖drawRect()方法rect以添加一些文本,但不要忘记调用super()以确保绘制图像.

var stringAttrs = [UITextAttributeFont : font,      
                  UITextAttributeTextColor : textColor ]

var attrStr = NSAttributedString(string:"hello", attributes:stringAttrs)
attrStr.drawAtPoint:CGPointMake(10.f, 10.f)
Run Code Online (Sandbox Code Playgroud)