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
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
150
MIRU 2026 チュートリアル
keisuke198619
0
350
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
170
AI研修(Day1)【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
3.2k
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
890
オートマトンと字句解析でRoslynを読む
tomokusaba
0
130
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
790
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
150
実践が先生だった— 新卒サーバーエンジニア1年目のリアル
mixi_engineers
PRO
0
220
AI時代の強いチームの作り方
yuukiyo
23
12k
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
540
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
380
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
108
250k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
KATA
mclloyd
PRO
35
15k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
The untapped power of vector embeddings
frankvandijk
2
1.8k
A Tale of Four Properties
chriscoyier
163
24k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
230
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
510
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͔Βૢ࡞͢Δͱ ࣮ͱςʔϚ͕Ͱ͖ͯḿΔ