{"id":120,"date":"2025-10-04T09:30:51","date_gmt":"2025-10-04T00:30:51","guid":{"rendered":"https:\/\/devserver.kr\/blog\/?p=120"},"modified":"2025-10-04T09:30:51","modified_gmt":"2025-10-04T00:30:51","slug":"ios-custom-view-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95","status":"publish","type":"post","link":"https:\/\/devserver.kr\/blog\/ios\/ios-custom-view-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95\/","title":{"rendered":"iOS Custom View \ub9cc\ub4dc\ub294 \ubc29\ubc95"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><h3>custom view \ub9cc\ub4e4\uae30<\/h3>\n<ol>\n<li>UIView \ub97c \uc0c1\uc18d\ud558\ub294 customView \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/li>\n<\/ol>\n<p>\uae30\ubcf8 \ud615\ud0dc\ub294 \uc544\ub798\ucc98\ub7fc.<\/p>\n<pre><code class=\"language-swift\">import UIKit\n\nclass CustomView: UIView {\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        \n        commonInit()\n    }\n    \n    required init?(coder: NSCoder) {\n        \/\/fatalError(&quot;init(coder:) has not been implemented&quot;)\n        \n        super.init(coder: coder)\n        \n        commonInit()\n    }\n    \n    \/\/ \ubcc0\uc218\ucd08\uae30\ud654\ud558\uba74\uc11c \ud074\ub798\uc2a4\ub97c \ucd08\uae30\ud654\ud558\ub294 convenience init()\n    convenience init(progress:[Double], frame:CGRect) {    \n        self.init(frame:frame)\n\n        self.progress = CGFloat(progress[0])\n        self.progressIn = CGFloat(progress[1])\n        self.progressOut = CGFloat(progress[2])\n        \n        commonInit()\n    }\n\n    private func commonInit() {\n        \n    }\n    \n    override func draw(_ rect: CGRect) {\n        \/\/ Drawing code\n    }\n    \n\n}\n<\/code><\/pre>\n<h3>xib \uae30\ubc18\uc73c\ub85c \ub9cc\ub4e4 \uacbd\uc6b0<\/h3>\n<p>customView.swift UIView \uc0c1\uc18d\ncustomView.xib<\/p>\n<p>xib \uc5d0\uc11c File\u2019s owner \ub97c customView\ub85c \uc7a1\uc544\uc8fc\uace0, xib \ub0b4\uc758 \ucee8\ud2b8\ub864\ub7ec\ub4e4\uc744 @IBOutlet \uc73c\ub85c \uc7a1\uc544\uc8fc\ub294\ub370,\n\ucd5c\uc0c1\uc704 view\ub97c contentView\ub85c \uac00\uc838\uc624\ub294 \uac83\uc744 \uae30\uc5b5\ud560 \uac83.<\/p>\n<pre><code class=\"language-swift\">class DateProgressView: UIView {\n    \n    @IBOutlet var contentView: UIView!\n    @IBOutlet weak var img:UIImageView!\n    @IBOutlet weak var btnDate: UIButton!\n    @IBOutlet weak var progress: UIProgressView!\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        \n        commonInit()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        \n        commonInit()\n    }\n    \n    private func commonInit() {\n        Bundle.main.loadNibNamed(&quot;CustomView&quot;, owner: self, options: nil)\n        \n        contentView.fixInView(self)\n        \n        self.layer.cornerRadius = 10\n        self.layer.masksToBounds = true\n        \n        \/\/self.isOpaque = false\n        contentView.backgroundColor = UIColor.yellow\n        \n        btnDate.setTitle(&quot;&quot;, for: .normal)\n        \n        progress.progress = 0.0\n    }\n    \n    @IBAction func buttonTapped(_ sender: Any) {\n        \/\/print(&quot;date tapped&quot;)\n        \n        delegate?.dateTapped(sender)\n    }\n    \n}\n<\/code><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","hentry","category-ios","category-swift"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":1,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/120\/revisions\/121"}],"wp:attachment":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}