Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UIAppearanceを通して カスタムViewクラスを弄る
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ninjinkun
February 12, 2014
Technology
2k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UIAppearanceを通して カスタムViewクラスを弄る
ninjinkun
February 12, 2014
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
180
Designer's and Engineer's Thinking Styles
ninjinkun
0
310
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
610
ディープリンクの 設計と実装 - iOSDC2017
ninjinkun
18
11k
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
17k
フリルのアプリ開発今昔物語
ninjinkun
3
2.3k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3.1k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
750
Other Decks in Technology
See All in Technology
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
160
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
270
reFACToring
moznion
1
1.1k
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
140
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
200
実践が先生だった— 新卒サーバーエンジニア1年目のリアル
mixi_engineers
PRO
0
220
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
7
3k
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
0
540
MIRU 2026 チュートリアル
keisuke198619
0
370
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
610
Atlassian Cloudサポート業務でのAIエージェント活用事例
smt7174
0
210
システム監視入門
grimoh
5
790
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.1k
Facilitating Awesome Meetings
lara
57
7k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
The Spectacular Lies of Maps
axbom
PRO
1
880
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
330
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
GraphQLとの向き合い方2022年版
quramy
50
15k
How to make the Groovebox
asonas
2
2.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Transcript
6*"QQFBSBODFΛ௨ͯ͠ ΧελϜ7JFXΫϥεΛ࿔Δ ninjinkun
ࠓ͓͍͑ͨ͜͠ͱ w ΧελϜ7JFXΫϥεΛ࡞Δͷʹ6*"QQFBSBODF͕ศར
6*"QQFBSBODFͱ w 6*"QQFBSBODFΛ࣮͍ͯ͠ΔΦϒδΣΫτͷσϑΥ ϧτϓϩύςΟΛมߋͰ͖ΔΈ w 6*7JFX6*"QQFBSBODFΛ࣮͍ͯ͠Δ w ࣗͰఆٛͨ͠ϓϩύςΟมߋͰ͖Δ
ϘλϯΛ࡞Δ w ઢ͖ͷϘλϯΛ͍͍ͨ w ৭ͷόϦΤʔγϣϯ͕͋Δ ྫ͑͜ΜͳγνϡΤʔγϣϯ
ϘλϯΛ࡞Δ w ը૾Ͱ͕ΜΔ w #VUUPO#VJMEFSΛͭ͘Δ w YJC TUPSZCPBSEͰ͑ͳ͍ w ϕʔεΫϥεΛ࡞ͬͯࢠΫϥεͰΦʔόʔϥΠυ͢Δ
w ϕʔεΫϥεΛ࡞ͬͯࢠΫϥεΛ6*"QQFBSBODFͰૢ ࡞͢Δ ߟ͑ΒΕΔํ๏
ϘλϯΛ࡞Δ w ͖ϘλϯͷϕʔεΫϥεΛ࡞Δ ϕʔεΫϥεΛ࡞ͬͯࢠΫϥεΛ6*"QQFBSBODFͰૢ࡞͢Δ @interface NJKBaseButton : UIButton ! @property
(nonatomic) UIColor *borderColor UI_APPEARANCE_SELECTOR; @property (nonatomic) CGFloat borderWidth UI_APPEARANCE_SELECTOR; @property (nonatomic) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; ! @end
@implementation NJKBaseButton ! - (id)initWithFrame:(CGRect)frame { … } ! -
(id)initWithCoder:(NSCoder *)aDecoder { … } ! - (void)setupViews { self.layer.masksToBounds = YES; ! // avoid storybord overriding UIColor *color = [[[self class] appearance] titleColorForState:UIControlStateNormal]; if (color) { [self setTitleColor:color forState:UIControlStateNormal]; } } ! - (void)setBorderColor:(UIColor *)borderColor { _borderColor = borderColor; self.layer.borderColor = borderColor.CGColor; } ! - (void)setBorderWidth:(CGFloat)borderWidth { _borderWidth = borderWidth; self.layer.borderWidth = borderWidth; } ! - (void)setCornerRadius:(CGFloat)cornerRadius { _cornerRadius = cornerRadius; self.layer.cornerRadius = cornerRadius; } ! @end
ϘλϯΛ࡞Δ w ϕʔεΫϥεΛܧঝͯ͠৭͖ͭϘλϯͷΫϥεΛ࡞Δ w ΫϥεΛ࡞Δ͚ͩͰ࣮ۭ ϕʔεΫϥεΛ࡞ͬͯࢠΫϥεΛ6*"QQFBSBODFͰૢ࡞͢Δ @interface NJKBlueButton : NJKBaseButton
@end ! @interface NJKBlueLineButton : NJKBaseButton @end ! @interface NJKGreenButton : NJKBaseButton @end ! ! @implementation NJKBlueButton @end ! @implementation NJKBlueLineButton @end ! @implementation NJKGreenButton @end
ϘλϯΛ࡞Δ w ৭ͷఆٛ6*"QQFBSBODFΛ௨ͯ͠ผͷίʔυͰࢦఆ ͢Δ ϕʔεΫϥεΛ࡞ͬͯࢠΫϥεΛ6*"QQFBSBODFͰૢ࡞͢Δ @implementation NJKTheme ! + (void)initialize
{ [[NJKBaseButton appearance] setCornerRadius:4.0]; ! ! [[NJKBlueButton appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; ! ! [[NJKBlueLineButton appearance] setBorderWidth:1.0]; [[NJKBlueLineButton appearance] setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; [[NJKBlueLineButton appearance] setBorderColor:[UIColor blueColor]]; } ! @end
@implementation NJKTheme ! + (void)initialize { ! [[NJKBaseButton appearance] setCornerRadius:4.0];
! ! [[NJKBlueButton appearance] setTitleColor:[UIColor colorWithString:@"#ffffff"] forState:UIControlStateNormal]; [[NJKBlueButton appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithString:@"#3498DB"]] forState:UIControlStateNormal]; [[NJKBlueButton appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithString:@"#2980B9"]] forState:UIControlStateHighlighted]; ! ! [[NJKBlueLineButton appearance] setBorderWidth:1.0]; [[NJKBlueLineButton appearance] setTitleColor:[UIColor colorWithString:@"#3498DB"] forState:UIControlStateNormal]; [[NJKBlueLineButton appearance] setTitleColor:[UIColor colorWithString:@"#ffffff"] forState:UIControlStateHighlighted]; [[NJKBlueLineButton appearance] setBorderColor:[UIColor colorWithString:@"#3498DB"]]; [[NJKBlueLineButton appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithString:@"#3498DB"]] forState:UIControlStateHighlighted]; ! } ! @end
ϝϦοτ w ࣮ͱςʔϚ͕Ͱ͖Δ w Ϙλϯ࣮Ϋϥε w ςʔϚΫϥε w )5.-$44ͷؔ w
1JYBUF /6* /JNCVT
'"2 w ଟஈܧঝʹͳΔ͚Ͳʜ w ΦʔόʔϥΠυͯ͠ৼΔ͍Λม͍͑ͯΔ༁Ͱͳ͍ w ม͑ΔͷॳظͷΈ w ܧঝͱݴ͏ΑΓ໊લΛม͍͑ͯΔ͚ͩ
·ͱΊ w ΧελϜ7JFXΛ6*"QQFBSBODF͔Βૢ࡞͢Δͱ ࣮ͱςʔϚ͕Ͱ͖ͯḿΔ