Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
ふくあず#8
Atsushi Kojima
JavaScriptでいいじゃなイカ
Yuuichi Akagawa
JqueryMobile
Hazuki Wakabayashi
Amplify Console使ってみたらいい感じ
Osamu Hashimoto
エンジニアのUI/UXはじめの一歩
HonMarkHunt
AngularJS+TypeScriptを試してみた。
Toshio Ehara
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
Shuji Yamada
現場!実物!実践!マルチクラスタを運用するときの課題とコツ
Shuji Yamada
1
of
53
Top clipped slide
IBDesignable / IBInspectable で UIプロトタイピンガブル
Jul. 11, 2015
•
0 likes
1 likes
×
Be the first to like this
Show More
•
2,928 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
IBDesignable / IBInspectable を Swift2 の Protocol Extension で UIプロトタイピングに利用しようという話です。
Masaki Oshikawa
Follow
Software Developer at Azione co., Ltd.
Advertisement
Advertisement
Advertisement
Recommended
Obj-CをSwiftにリプレースするお話
Hitoshi Saito
677 views
•
19 slides
iOSで動画からスクショを撮る方法
Tomo Ita
2K views
•
17 slides
UI要素を動的に利用する
HideoMiyake
1.9K views
•
15 slides
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
崇之 清水
10.4K views
•
33 slides
【ABC2014Spring LT】AngularJSでWEBアプリ開発
Hiroyuki Kusu
5.2K views
•
16 slides
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
崇之 清水
10.9K views
•
43 slides
More Related Content
Slideshows for you
(9)
ふくあず#8
Atsushi Kojima
•
1.4K views
JavaScriptでいいじゃなイカ
Yuuichi Akagawa
•
1.5K views
JqueryMobile
Hazuki Wakabayashi
•
1.1K views
Amplify Console使ってみたらいい感じ
Osamu Hashimoto
•
203 views
エンジニアのUI/UXはじめの一歩
HonMarkHunt
•
380 views
AngularJS+TypeScriptを試してみた。
Toshio Ehara
•
4.2K views
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
Shuji Yamada
•
1.2K views
現場!実物!実践!マルチクラスタを運用するときの課題とコツ
Shuji Yamada
•
1.6K views
Core Animation 使って見た
OCHI Shuji
•
1.6K views
Similar to IBDesignable / IBInspectable で UIプロトタイピンガブル
(20)
20121201yidev hirobe iPad miniでRetina
Kazuya Hirobe
•
1.9K views
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Fumiya Sakai
•
345 views
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
佐藤 俊太郎
•
2.1K views
Wolcome to swift
Kyohei Ito
•
1K views
FlutterをRenderObjectまで理解する
KeisukeKiriyama
•
243 views
Unityの夕べ in Fukuoka
Shinobu Izumi
•
3.6K views
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
•
286 views
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
•
631 views
iPhoneアプリ開発の歩き方〜Swift編〜
Yusuke SAITO
•
4.2K views
2012 05-19第44回cocoa勉強会発表資料
OCHI Shuji
•
1.2K views
機械学習 (AI/ML) 勉強会 #1 基本編
Fujio Kojima
•
2.7K views
iOS WebView App
hagino 3000
•
14.4K views
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
Fumiya Sakai
•
2.6K views
レスポンシブWebデザイン【発展編】
Yasuhito Yabe
•
1.7K views
Css nite(2010.09.23)
Yoshiki Ushida
•
689 views
WKWebViewとUIWebView
Yuki Hirai
•
48.1K views
20111031 MobileWeb at TDC
Nobuhiro Sue
•
2.4K views
vImageのススメ(改訂版)
Shuichi Tsutsumi
•
6.3K views
Xamarin で ReactiveUI を使ってみた
Hironov OKUYAMA
•
5.6K views
jQuery Mobileカスタマイズ自由自在 v1.2
yoshikawa_t
•
4.5K views
Advertisement
Recently uploaded
(20)
AIEXPO_CDLE名古屋紹介
KotaMiyano
•
3 views
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
224 views
HTTPの仕組みについて
iPride Co., Ltd.
•
9 views
社内ソフトスキルを考える
infinite_loop
•
85 views
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.
•
24 views
20230523_IoTLT_vol99_kitazaki_v1.pdf
Ayachika Kitazaki
•
112 views
Omnis
DaisukeFujita10
•
21 views
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
15 views
通信プロトコルについて
iPride Co., Ltd.
•
7 views
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
Rakuten Group, Inc.
•
0 views
SoftwareControl.pdf
ssusercd9928
•
7 views
Oracle Cloud Infrastructure:2023年5月度サービス・アップデート
オラクルエンジニア通信
•
31 views
TestSIP (1).pdf
DeependraSingh712859
•
2 views
ネットワークパケットブローカー市場.pdf
HinaMiyazu
•
7 views
Wandb LLM Webinar May 30 2023 (配布用).pdf
Yuya Yamamoto
•
3 views
量子論.pdf
hiro150493
•
7 views
《杨百翰大学毕业证|学位证书校内仿真版本》
d520dasw12
•
2 views
統計学の攻略_統計的仮説検定の9パターン.pdf
akipii Oga
•
220 views
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
•
63 views
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
9 views
IBDesignable / IBInspectable で UIプロトタイピンガブル
IBDesignable / IBInspectable
で UIプロトタイピンガブル
自己紹介 @starfruits_j (Little Gleam)
自己紹介 @starfruits_j (Oshikawa)
自己紹介 hackadl
株式会社Azione 元Webデザイナーのプログラマー、管理職 デコメーラー、モバスペブック 個人でもアプリ
Swift!?
Swift 採用決定!
Swift 2.0 採用決定!
Swift 処理が高速化される!? 安全! コーディングが高速化! コーディングデザインばっかり考えてしまって進まない!
本題
IBDesignable / IBInspectable 使ってますか? XCode
6 から使える Interface Builder で修正できないものを変更可能に 変更内容をInterface Builder で確認できる
使い方 import UIKit @IBDesignable class
DesignableView: UIView { @IBInspectable var cornerRadius: CGFloat = 0 { didSet { layer.cornerRadius = cornerRadius } } }
Extension でも実装できます ! Extensions
may not contain stored properties
Extension でも実装できます ※ (conputed
propertyで) extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius }
set { layer.cornerRadius =
newValue if newValue > 0 { layer.masksToBounds = true } } } }
やりすぎるとIBが大変 extensionは計画的に
他にもこんな値が割り振れます * Bool * Int *
CGFloat * Double * String * CGPoint * CGSize * CGRect * UIColor * UIImage
プロトタイピングツールとして Interface Builderを使う 去年くらいに話題になりました。
画像を登録して、UIImage.imageNamedにセットしたり デザイナには少し敷居が高い そもそも画像を用意するなら、Illustratorでおk
IBDesignableを使えば より具体的なデザインが可能に
おすすめInspecterble
UIImageView.SVGNamed(named: String) UIImage+SVG等を利用してSVGのファイル名から画像表示。 xmlから作成もできるかも @IBDesignable class
SVGImageView: UIImageView { @IBInspectable var SVGNamed: NSString? @IBInspectable var SVGImageSize: CGSize? @IBInspectable var SVGColor: UIColor?
override func awakeFromNib()
{ super.awakeFromNib() let size = SVGImageSize ?? frame.size image = UIImage(SVGNamed: SVGNamed, targetSize: size, fillColor: SVGColor) } }
UIImageView.iconFontNamed FontAwesomeKitを利用してFontIconの名前で画像表示。 @IBDesignable class IconFontImageButton:
UIButton { @IBInspectable var iconFontNamed: String? { didSet { self.iconFont = IconFont(rawValue: iconFontNamed!)! } }
var iconFont: IconFont
= .None { didSet { updateImage() } } @IBInspectable var iconPoint: CGFloat = CGFloat.NaN { didSet { updateImage() } } private func updateImage() { let point = iconPoint.isNaN ? min(frame.size.width, frame.size.height) : icon let img = iconFont.image(point: point, outSize: frame.size)
enumが使えないのが残念。一個一個マッピングして使ってま す enum IconFont: String
{ case None = "none" case ArrowBack = "ArrowBack"
func image(point point:
CGFloat, outSize: CGSize) -> UIImage? { var icon: FAKIonIcons? = nil switch self { case .None: break case .ArrowBack: icon = FAKIonIcons.iosArrowBackIconWithSize(point) } return icon?.imageWithSize(outSize) } }
UIButton.highlightedBackgroundColor @IBDesignable class DesignableButton:
UIButton { @IBInspectable var highlightedBackgroundColor: UIColor? private var defaultBackgroundColor: UIColor?
override var highlighted:
Bool { didSet { if highlighted { backgroundColor = highlightedBackgroundColor } else { backgroundColor = defaultBackgroundColor } } }
override func awakeFromNib()
{ super.awakeFromNib() defaultBackgroundColor = backgroundColor } }
UIImageView.imageURLString @IBDesignable class DesignableImageView:
UIImageView { @IBInspectable var imageURLString: String = "" { didSet { if let URL = NSURL(string: imageURLString) { image = UIImage(data: NSData(contentsOfURL: URL)!) } } } } ※ レンダリングの処理が200msを超えるとtimeoutになります あくまでも仮で表示したい場合に。
UIImageView.imageOrientation @IBInspectable var imageOrientation:
Int = 0 { didSet { let orientation = UIImageOrientation(rawValue: imageOrientation)! image = UIImage(CGImage: image?.CGImage, scale: 0, orientation: orient } }
他にも * UIButton.imageSize: insetで引き算するより使いやすい *
UIImageView.placeHolderImage: SDWebImage等の非同期読み込み時の画像 * gradation, gradationDirection: UIColor 2つ と グラデーションする方向 * cornerRadius: CGFloat * borderCurcle: Bool * backgroundBlur: Bool (未確認) * borderColor * shadowColor * などなど
ところで
Swift 2.0 :
主な変更点 guard defer Error Handling Protocol Extension
Swift 2.0 :
主な変更点 guard defer Error Handling Protocol Extension
Protocol Extension Protocolに実装を持たせられる optionalなdelegateがSwiftでも書けるように Appleが積極的に採用 クラス継承->プロトコル継承に
既存のクラスに横から差し込むように 実装を追加できる
注意点 インスタンス変数は作れない 既存コードのオーバーライドは無理 名前の衝突の可能性 global functionの代わりと考える
なんとかブルって名前が多い Comparable, Reflectable, Printable,
Sliceable...
こんなブルができたら 最高じゃないですか? @IBDesignable class RoundizeView:
UIView, Roundable { }
BlurEffectable @IBDesignable class AccountCell:
UITableViewCell, BlurEffectable { }
FontIconable @IBDesignable class UserView:
UIView, FontIconable { }
できませんでした!
protocol Roundable: class
{ var cornerRadius: CGFloat { get set } }
extension Roundable where
Self : UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius }
set { layer.cornerRadius =
newValue if newValue > 0 { layer.masksToBounds = true } } } }
@IBDesignable class RoundableView:
UIView, Roundable { override func awakeFromNib() { super.awakeFromNib() } }
@IBDesignable class RoundableImageView:
UIImageView, Roundable { override func awakeFromNib() { super.awakeFromNib() } }
理由 IBInspectableはinstance propertyにのみ設定可能 Protocol Extension
にはインスタンス変数は作れない extension ならcomputed propertyで可能です
おわり Protocol ExtensionについてはTomohiro Kumagai
@es_kumagai さんの資料が参考になります Swift 2.0 大域関数の行方から#swift2symposium プロトコル拡張の話? #WWDC21cafe http://www.slideshare.net/tomohirokumagai54/swift-20- 49927701 http://www.slideshare.net/tomohirokumagai54/wwdc21cafe
Advertisement