首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从UILabel创建镜像?

如何从UILabel创建镜像?
EN

Stack Overflow用户
提问于 2012-08-08 22:48:57
回答 5查看 17.6K关注 0票数 27

我目前正在iphone上开发一个简单的photoshop类应用程序。当我想拼合图层时,标签的位置很好,但字体大小不好。下面是我要扁平化的代码:

代码语言:javascript
复制
UIGraphicsBeginImageContext(CGSizeMake(widthDocument,widthDocument));

for (UILabel *label in arrayLabel) {
    [label drawTextInRect:label.frame];
}

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

有人能帮我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-08 23:08:40

出发地:pulling an UIImage from a UITextView or UILabel gives white image

// iOS

代码语言:javascript
复制
- (UIImage *)grabImage {
    // Create a "canvas" (image context) to draw in.
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0);  // high res
    // Make the CALayer to draw in our "canvas".
    [[self layer] renderInContext: UIGraphicsGetCurrentContext()];

    // Fetch an UIImage of our "canvas".
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    // Stop the "canvas" from accepting any input.
    UIGraphicsEndImageContext();

    // Return the image.
    return image;
}

// Swift扩展w/ usage。credit @Heberti Almeida在以下评论中

代码语言:javascript
复制
extension UIImage {
    class func imageWithLabel(label: UILabel) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0)
        label.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img
    }
}

用法:

代码语言:javascript
复制
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 22))
label.text = bulletString
let image = UIImage.imageWithLabel(label)
票数 50
EN

Stack Overflow用户

发布于 2012-08-08 23:09:12

您需要在上下文中呈现标签

替换

代码语言:javascript
复制
[label drawTextInRect:label.frame];

使用

代码语言:javascript
复制
[label.layer renderInContext:UIGraphicsGetCurrentContext()];

而且您需要为每个标签创建一个图像,因此将for循环移到begin和end上下文调用之外

票数 5
EN

Stack Overflow用户

发布于 2016-07-07 16:05:06

对于Swift,我使用UIView-extension:

代码语言:javascript
复制
// Updated for Swift 3.0
extension UIView {
    var grabbedImage:UIImage? {
        get {
            UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0)
            layer.render(in: UIGraphicsGetCurrentContext()!)
            let img = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return img
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11867152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档