美文网首页
Swift绘制托马斯小火车的脸

Swift绘制托马斯小火车的脸

作者: 大成小栈 | 来源:发表于2023-12-12 11:05 被阅读0次
绘制托马斯

代码逻辑,如下:

class ViewController: UIViewController { 

override func viewDidLoad() {
        super.viewDidLoad()
        
        // 画脸
        let headView = CartoonHeadView(frame: CGRect(x: 40, y: 0, width: 300, height: 300))
        view.addSubview(headView)
        
        // 画个圈
        if let image = createRingImage() {
            let imageView = UIImageView(image: image)
            imageView.frame = CGRect(x: 40, y: 0, width: 300, height: 300)
            imageView.contentMode = .scaleAspectFit
             view.addSubview(imageView)
        }
    }
    
    func createRingImage() -> UIImage? {
        let size = CGSize(width: 300, height: 300)
        let radius: CGFloat = 100
        let strokeWidth: CGFloat = 20

        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)

        guard let context = UIGraphicsGetCurrentContext() else {
            return nil
        }

        // 绘制透明背景
        context.setFillColor(UIColor.clear.cgColor)
        context.fill(CGRect(origin: .zero, size: size))

        // 绘制白色圆环
        let circleRect = CGRect(x: (size.width - 2 * radius) / 2, y: (size.height - 2 * radius) / 2, width: 2 * radius, height: 2 * radius)
        context.setStrokeColor(UIColor.white.cgColor)
        context.setLineWidth(strokeWidth)
        context.strokeEllipse(in: circleRect)

        // 从绘图上下文获取图像
        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        return image
    }

}


extension ViewController {
    class CartoonHeadView: UIView {

        override func draw(_ rect: CGRect) {
            super.draw(rect)

            guard let context = UIGraphicsGetCurrentContext() else { return }

            // 画头部
            let headPath = UIBezierPath(ovalIn: CGRect(x: 50, y: 50, width: 200, height: 200))
            context.setFillColor(UIColor.brown.cgColor)
            context.addPath(headPath.cgPath)
            context.fillPath()

            // 画眼睛
            let leftEyePath = UIBezierPath(ovalIn: CGRect(x: 100, y: 100, width: 40, height: 40))
            context.setFillColor(UIColor.white.cgColor)
            context.addPath(leftEyePath.cgPath)
            context.fillPath()

            let rightEyePath = UIBezierPath(ovalIn: CGRect(x: 160, y: 100, width: 40, height: 40))
            context.setFillColor(UIColor.white.cgColor)
            context.addPath(rightEyePath.cgPath)
            context.fillPath()

            // 画眼珠
            let leftPupilPath = UIBezierPath(ovalIn: CGRect(x: 120, y: 120, width: 20, height: 20))
            context.setFillColor(UIColor.black.cgColor)
            context.addPath(leftPupilPath.cgPath)
            context.fillPath()

            let rightPupilPath = UIBezierPath(ovalIn: CGRect(x: 180, y: 120, width: 20, height: 20))
            context.setFillColor(UIColor.black.cgColor)
            context.addPath(rightPupilPath.cgPath)
            context.fillPath()

            // 画鼻子
            let nosePath = UIBezierPath()
            nosePath.move(to: CGPoint(x: 150, y: 150))
            nosePath.addLine(to: CGPoint(x: 130, y: 170))
            nosePath.addLine(to: CGPoint(x: 150, y: 170))
            nosePath.close()
            context.setFillColor(UIColor.black.cgColor)
            context.addPath(nosePath.cgPath)
            context.fillPath()

            // 画嘴巴
            let mouthPath = UIBezierPath()
            mouthPath.move(to: CGPoint(x: 120, y: 190))
            mouthPath.addCurve(to: CGPoint(x: 180, y: 190), controlPoint1: CGPoint(x: 120, y: 200), controlPoint2: CGPoint(x: 180, y: 200))
            context.setLineWidth(5)
            context.setStrokeColor(UIColor.black.cgColor)
            context.addPath(mouthPath.cgPath)
            context.strokePath()
        }
    }
}

相关文章

  • 找到兴趣的切入点

    橙子哥喜欢看托马斯这个动画片。 在今年六一节前,我给他买了一套托马斯小火车,说是妹妹送给哥哥的礼物,小盆友很是兴奋...

  • 谢谨翊的作品《托马斯小火车》

    启迪乐高学员:谢谨翊《托马斯小火车》 课程阶段:小小探索家 课程主题:托马斯小火车 任课老师:小白老师 课程日期:...

  • 南京六朝博物馆20181209

    瓦当,是不是像托马斯小火车呢

  • 「亲子共读,快乐生活 92/1000」

    今天爸爸讲特别车厢不见了(托马斯系列)。 ❀ 儿子是有多喜欢托马斯!回来得这几天,不是玩托马斯小火车,就是玩托马斯...

  • 托马斯·库克

    英国人托马斯·库克 . 托马斯·库克被称为“世界旅游业之父” 1841 年托马斯·库克利用包租火车的方式 , 组织...

  • 托马斯小火车

  • 《托马斯小火车》

    期待着小火车的到来~ 空空的铁轨 呀,终于盼来了一辆小火车! 火车准备进遂道了 飞驰而过 运货火车 来不及看清楚,...

  • 托马斯小火车

    如果说由动画片而喜欢上一本书的话, 卡通人物里面能数的出来的有大头儿子,芭比娃娃,朵拉,托马斯,而托马斯是这几年看...

  • Swift 绘制圆形头像

    使用 Swift 绘制圆形头像,代码如下: Swift2.3 版本的写法(写在 UIImage 的扩展中) Swi...

  • 儿子英伟不凡的火车之旅

    儿子痴迷火车,从上托儿班开始,每周都要去坐一个来回火车,特别开心。然后是看托马斯小视频,托马斯的书籍,开始购买各种...

网友评论

      本文标题:Swift绘制托马斯小火车的脸

      本文链接:https://www.haomeiwen.com/subject/vejvgdtx.html