首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在swift中用CGContext实现矩形/线条的程序化绘制

如何在swift中用CGContext实现矩形/线条的程序化绘制
EN

Stack Overflow用户
提问于 2014-08-10 23:10:00
回答 3查看 39.3K关注 0票数 17

我已经在互联网上搜索了几天,试图找到关于如何在Swift中按程序绘制矩形或线条的最简单的代码示例。我已经了解了如何通过覆盖DrawRect命令来完成此操作。我相信您可以创建一个CGContext,然后将其绘制成图像,但我希望看到一些简单的代码示例。或者这是一种可怕的方法?谢谢。

代码语言:javascript
复制
class MenuController: UIViewController 
{

    override func viewDidLoad() 
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.view.backgroundColor = UIColor.blackColor()

        var logoFrame = CGRectMake(0,0,118,40)
        var imageView = UIImageView(frame: logoFrame)
        imageView.image = UIImage(named:"Logo")
        self.view.addSubview(imageView)

        //need to draw a rectangle here
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-11 03:31:45

下面是一个创建自定义UIImage的示例,其中包含一个透明背景和一个红色矩形,其中的线条与其对角线相交。

代码语言:javascript
复制
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad();

        let imageSize = CGSize(width: 200, height: 200)
        let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 100, y: 100), size: imageSize))
        self.view.addSubview(imageView)
        let image = drawCustomImage(size: imageSize)
        imageView.image = image
    }
}

func drawCustomImage(size: CGSize) -> UIImage {
    // Setup our context
    let bounds = CGRect(origin: .zero, size: size)
    let opaque = false
    let scale: CGFloat = 0
    UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
    let context = UIGraphicsGetCurrentContext()!

    // Setup complete, do drawing here
    context.setStrokeColor(UIColor.red.cgColor)
    context.setLineWidth(2)

    context.stroke(bounds)

    context.beginPath()
    context.move(to: CGPoint(x: bounds.minX, y: bounds.minY))
    context.addLine(to: CGPoint(x: bounds.maxX, y: bounds.maxY))
    context.move(to: CGPoint(x: bounds.maxX, y: bounds.minY))
    context.addLine(to: CGPoint(x: bounds.minX, y: bounds.maxY))
    context.strokePath()

    // Drawing complete, retrieve the finished image and cleanup
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image!
}
票数 34
EN

Stack Overflow用户

发布于 2016-10-27 02:50:36

使用Swift 3.0的更新答案

代码语言:javascript
复制
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad();

        let imageSize = CGSize(width: 200, height: 200)
        let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 100, y: 100), size: imageSize))
        self.view.addSubview(imageView)
        let image = drawCustomImage(size: imageSize)
        imageView.image = image
    }
}

func drawCustomImage(size: CGSize) -> UIImage? {
    // Setup our context
    let bounds = CGRect(origin: CGPoint.zero, size: size)
    let opaque = false
    let scale: CGFloat = 0
    UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
    guard let context = UIGraphicsGetCurrentContext() else { return nil }

    // Setup complete, do drawing here
    context.setStrokeColor(UIColor.red.cgColor)
    context.setLineWidth(5.0)

    // Would draw a border around the rectangle
    // context.stroke(bounds)

    context.beginPath()
    context.move(to: CGPoint(x: bounds.maxX, y: bounds.minY))
    context.addLine(to: CGPoint(x: bounds.minX, y: bounds.maxY))
    context.strokePath()

    // Drawing complete, retrieve the finished image and cleanup
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

let imageSize = CGSize(width: 200, height: 200)
let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 100, y: 100), size: imageSize))
let image = drawCustomImage(size: imageSize)
imageView.image = image
票数 9
EN

Stack Overflow用户

发布于 2015-07-30 03:51:56

当其中一个玩家获胜时,我使用被接受的答案在Tic Tac Toe游戏中画线。谢谢,很高兴知道它起作用了。不幸的是,我遇到了一些问题,让它同时在不同大小的iPhones和iPads上工作。这可能是本应解决的问题。基本上,我要说的是,根据您的情况,可能不值得花那么多时间编写这些代码。

我的替代方案是在Photoshop中简单地制作定制的、更好看的线条,然后用UIImageView加载它。对我来说,这要简单得多,运行得更好,看起来也更好。显然,这真的取决于你需要它做什么。

步骤:

1:下载或创建镜像(最好另存为.PNG)

2:将其拖动到您的项目中

3:将UIImage视图拖到情节提要中

4:单击图像视图并在属性检查器中选择图像

5:按Ctrl键单击Image View并将其拖动到.swift文件以声明一个插座

6:设置自动布局约束,以便在所有设备上轻松工作

屏幕上和屏幕外的图像视图的动画、旋转和转换也可以说更容易

更改图像的步骤:

代码语言:javascript
复制
yourImageViewOutletName.image = UIImage(named: "ImageNameHere")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25229916

复制
相关文章

相似问题

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