Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Satoshi Oomori
KEY, PPTX
2,840 views
Cocoa勉強会201208
Cocoa勉強会2012年8月25日NSAttributedStringとCoreTextで簡単な組版
Read more
8
Save
Share
Embed
Embed presentation
Download
Download as KEY, PPTX
1
/ 58
2
/ 58
3
/ 58
4
/ 58
5
/ 58
6
/ 58
7
/ 58
8
/ 58
9
/ 58
10
/ 58
11
/ 58
12
/ 58
13
/ 58
14
/ 58
15
/ 58
16
/ 58
17
/ 58
18
/ 58
19
/ 58
20
/ 58
21
/ 58
22
/ 58
23
/ 58
24
/ 58
25
/ 58
26
/ 58
27
/ 58
28
/ 58
29
/ 58
30
/ 58
31
/ 58
32
/ 58
33
/ 58
34
/ 58
35
/ 58
36
/ 58
37
/ 58
38
/ 58
39
/ 58
40
/ 58
41
/ 58
42
/ 58
43
/ 58
44
/ 58
45
/ 58
46
/ 58
47
/ 58
48
/ 58
49
/ 58
50
/ 58
51
/ 58
52
/ 58
53
/ 58
54
/ 58
55
/ 58
56
/ 58
57
/ 58
58
/ 58
More Related Content
PPT
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
PPTX
CG2013 12
by
shiozawa_h
PDF
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
by
schoowebcampus
PDF
Pfi Seminar 2010 1 7
by
Preferred Networks
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PDF
C++11概要 ライブラリ編
by
egtra
PDF
Ssaw08 0916
by
Atsushi Tadokoro
PDF
Van laarhoven lens
by
Naoki Aoyama
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
CG2013 12
by
shiozawa_h
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
by
schoowebcampus
Pfi Seminar 2010 1 7
by
Preferred Networks
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
C++11概要 ライブラリ編
by
egtra
Ssaw08 0916
by
Atsushi Tadokoro
Van laarhoven lens
by
Naoki Aoyama
What's hot
PDF
今から始める Lens/Prism
by
Naoki Aoyama
KEY
by
a-hisame
PDF
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
PPTX
CG2013 03
by
shiozawa_h
PDF
Aaなゲームをjsで
by
Moriyoshi Koizumi
PDF
GLSLによるシェーダーアートことはじめ
by
Yoichi Hirata
PDF
Ekmett勉強会発表資料
by
時響 逢坂
PPTX
CG2013 05
by
shiozawa_h
PPTX
機械学習
by
ssusere8ae711
PPTX
CG2013 07
by
shiozawa_h
PDF
20141128 iOSチーム勉強会 My Sweet Swift
by
necocen
PDF
Processing
by
Akifumi Nambu
PPTX
CG2013 02
by
shiozawa_h
PDF
FiltersでGLSLを楽しく学んじゃおう!
by
Kazuya Hiruma
PPTX
C# LINQ ~深く知って、使いまくろう~
by
Fujio Kojima
PPTX
Inside of excel 方眼紙撲滅委員会 #pyfes
by
Takeshi Komiya
PDF
すごいHaskell読書会 第7章 (前編)
by
Suguru Hamazaki
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
by
勝成 鈴江
PPTX
OpenGLと行列
by
miyosuda
ODP
Ekmett勉強会発表資料
by
時響 逢坂
今から始める Lens/Prism
by
Naoki Aoyama
by
a-hisame
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
CG2013 03
by
shiozawa_h
Aaなゲームをjsで
by
Moriyoshi Koizumi
GLSLによるシェーダーアートことはじめ
by
Yoichi Hirata
Ekmett勉強会発表資料
by
時響 逢坂
CG2013 05
by
shiozawa_h
機械学習
by
ssusere8ae711
CG2013 07
by
shiozawa_h
20141128 iOSチーム勉強会 My Sweet Swift
by
necocen
Processing
by
Akifumi Nambu
CG2013 02
by
shiozawa_h
FiltersでGLSLを楽しく学んじゃおう!
by
Kazuya Hiruma
C# LINQ ~深く知って、使いまくろう~
by
Fujio Kojima
Inside of excel 方眼紙撲滅委員会 #pyfes
by
Takeshi Komiya
すごいHaskell読書会 第7章 (前編)
by
Suguru Hamazaki
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
by
勝成 鈴江
OpenGLと行列
by
miyosuda
Ekmett勉強会発表資料
by
時響 逢坂
Similar to Cocoa勉強会201208
PDF
iPhone, iPad アプリ開発勉強会#3
by
Hiroe Orz
PPT
Cocoa勉強会201302
by
Satoshi Oomori
PPTX
try! Swift - Advanced Graphics with Core Animation
by
Tim Oliver
PDF
iOS UI Component API Design
by
Brian Gesiak
PDF
SWF研究会#2 LT フォントとテキスト
by
rakusan_
PDF
㉒初期プロジェクトを改造!
by
Nishida Kansuke
KEY
Core Graphicsでつくる自作UIコンポーネント入門
by
cocopon
PPT
Cocoa勉強会pdf関連
by
OCHI Shuji
iPhone, iPad アプリ開発勉強会#3
by
Hiroe Orz
Cocoa勉強会201302
by
Satoshi Oomori
try! Swift - Advanced Graphics with Core Animation
by
Tim Oliver
iOS UI Component API Design
by
Brian Gesiak
SWF研究会#2 LT フォントとテキスト
by
rakusan_
㉒初期プロジェクトを改造!
by
Nishida Kansuke
Core Graphicsでつくる自作UIコンポーネント入門
by
cocopon
Cocoa勉強会pdf関連
by
OCHI Shuji
More from Satoshi Oomori
PDF
Cocoa勉強会20140621 macとiosで共通のコード
by
Satoshi Oomori
PDF
Cocoa勉強会20140419ゲームをつくってみる
by
Satoshi Oomori
PDF
Word net cocoa勉強会201306
by
Satoshi Oomori
PDF
Scene kit cocoa勉強会201306
by
Satoshi Oomori
PDF
Cocoa勉強会ビギナーズramディスクとコマンドファイル
by
Satoshi Oomori
KEY
Cocoa勉強会関西2012年5月
by
Satoshi Oomori
KEY
Cocoa勉強会201203公開
by
Satoshi Oomori
PDF
Cocoa勉強会2011年11月
by
Satoshi Oomori
Cocoa勉強会20140621 macとiosで共通のコード
by
Satoshi Oomori
Cocoa勉強会20140419ゲームをつくってみる
by
Satoshi Oomori
Word net cocoa勉強会201306
by
Satoshi Oomori
Scene kit cocoa勉強会201306
by
Satoshi Oomori
Cocoa勉強会ビギナーズramディスクとコマンドファイル
by
Satoshi Oomori
Cocoa勉強会関西2012年5月
by
Satoshi Oomori
Cocoa勉強会201203公開
by
Satoshi Oomori
Cocoa勉強会2011年11月
by
Satoshi Oomori
Cocoa勉強会201208
1.
NSAttributedStringに
ついて 2012.8.25 Cocoa勉強会 大森智史
2.
• スライド、サンプルは基本的にすべて公開し ます。
3.
あんた、誰? • と、いうわけで自己紹介。
4.
• 大森智史といいます。 • Objective-Cで遊んでます。 •
印刷会社勤務。
5.
• と、いうことで本題に
6.
• 職業柄、電子書籍系のレビューなどは気に なっています。 •
先日、ある電子書籍の案内を見ていたら、す こし違和感を覚えました。
7.
2012 AppStore 2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
8.
サンプル画面 2012 AppStore 2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
9.
気がつきましたか?
10.
2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
11.
2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
12.
おかしいでしょ?
13.
2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
14.
• そこで、研究熱心な私は、購入して詳細を見 て見ることにしました。
15.
初めに言っときますけど 組版の研究目的です。!
16.
やっぱり変です。 2012 ミナミ・リエロ/株式会社日本文芸社/株式会社メディアタブレット/アドベンチャー 「女医が教える最高のセックス」より引用
17.
組版
の 研究ですからね! 本当ですよ!
18.
きっと • どうも横書き用のグリフを並べているだけな んでしょう。 •
縦書きは縦書き用のグリフを使わないと!全 体にバランス悪い。 • 「。」「、」だけは処理しているようだが。
19.
いいかげんな実装は やめていただきたい! •
きちんと実装しましょう。 • 縦書きは単に文字を縦にを並べれはいいとい うものではないです。
20.
と、いうことで
21.
きちんと実装するには • フォント情報を読んで • グリフを読んで •
レイアウトして
22.
• 参考資料 • 日本語組版の要件 •
W3C • http://www.w3.org/TR/2012/NOTE- jlreq-20120403/ja/
23.
そこまでする 必要はありません
24.
CoreTextで属性付きテキストを
描画 こんな感じでいいです。
25.
どうするか?
26.
属性付きテキストとは • フォント、色、サイズ • 下線 •
段落設定 左 え右 え • NSAttributedStringを使います。
27.
• 属性付きテキストだけでは段落設定や縦組み などはダメだけどCoreTextと組み合わせるこ
とで、多彩な表現が簡単に。
28.
だが、しかし • 今、iOS 5.1では、コンテキストを使ってしか
書く方法がない! • OS XにはdrawStringとかdrawRectとかView に書く方法がある! • 将来に期待したい!
29.
コンテキスト •
とりあえず、コンテキストで書く方法 • - (void)drawRect:(CGRect)rect { //コンテキスト ! CGContextRef context = UIGraphicsGetCurrentContext(); • ....書いていく • }
30.
• コンテキストを取得 • AttributedStringを作成 •
フレームを作成 • 描画
31.
• 以上です。
32.
コンテキスト •
レイヤーのコンテキストに書いていく方法 • - (void)drawRect:(CGRect)rect { //レイヤーを作成 CGLayerRef layer; CGContextRef layerContext; layer = CGLayerCreateWithContext(context,CGSizeMake(800, 800),NULL); //レイヤーのコンテキストを取得 layerContext = CGLayerGetContext(layer); • ....書いていく • }
33.
属性
34.
フォント ヒラギノ角ゴ ヒラギノ明朝
35.
フォント CTFontRef aFont1 = CTFontCreateWithName(CFSTR("HiraKakuProN-W6"),
20, NULL); NSDictionary *fontAttributes1 = [NSDictionary dictionaryWithObjectsAndKeys: (__bridge id)aFont1, @"NSFont" ... ,nil ]; NSAttributedString *grayString = [[NSAttributedString alloc] initWithString:@"リガチャnn ffi fln" attributes:fontAttributes1];
36.
カラー カラー カラー
37.
カラー NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: (__bridge id)darkGrayColor, @"CTForegroundColor", ... ,nil ];
38.
リガチャ(合字)
39.
リガチャ NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],kCTLigatureAttributeName, ... ,nil ];
40.
下線
41.
下線 NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: (__bridge id)redColor,kCTUnderlineColorAttributeName, [NSNumber numberWithInt:0x0100],kCTUnderlineStyleAttributeName, ... ,nil ];
42.
段落設定 (センターそろえ)
43.
段落設定
センターそろえ NSDictionary *fontAttributes1 = [NSDictionary dictionaryWithObjectsAndKeys: paragraphStyleAttr, kCTParagraphStyleAttributeName, ... ,nil ];
44.
id paragraphStyleAttr =
((^ { CTParagraphStyleSetting paragraphStyles[] = (CTParagraphStyleSetting[]){ (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment}, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierLineHeightMultiple, sizeof(float_t), (float_t[]){ lineHeight } }, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(float_t), (float_t[]) {lineHeight } }, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(float_t), (float_t[]) {lineHeight } }, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierLineSpacing, sizeof(float_t), (float_t[]) { 0.0f } }, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierMinimumLineSpacing, sizeof(float_t), (float_t[]){ 0.0f } }, (CTParagraphStyleSetting) { kCTParagraphStyleSpecifierMaximumLineSpacing, sizeof(float_t), (float_t[]){ 0.0f } } }; CTParagraphStyleRef paragraphStyleRef = CTParagraphStyleCreate(paragraphStyles, sizeof(paragraphStyles) / sizeof(CTParagraphStyleSetting)); return (__bridge id)paragraphStyleRef; })());
45.
デモ TEST1
46.
縦組み用
47.
縦組み用文字 NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], @"CTVerticalForms", ... ,nil ];
48.
+フレーム設定
が必要 AttributedStringじゃないけれど
49.
フレーム設定 //フレーム作成
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithUnsignedInt:kCTFrameProgressionRightToLeft], @"CTFrameProgression", nil]);
50.
文字間を等幅に (デリゲート使用)
51.
文字間を等幅に CGFloat MyGetWidthCallback( void*
refCon ){ NSLog(@"Width being set %s",refCon); return 30.0; } - (void)drawRect:(CGRect)rect{ CTRunDelegateCallbacks callbacks; callbacks.getWidth = MyGetWidthCallback; CTRunDelegateRef delegate = CTRunDelegateCreate(&callbacks, NULL); NSDictionary *fontAttributes1 = [NSDictionary dictionaryWithObjectsAndKeys: delegate,kCTRunDelegateAttributeName, ... ,nil ];
52.
文字間を調整 (カーニング使用)
53.
文字間を調整 NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat:5.0],kCTKernAttributeName, , ... ,nil ];
54.
リンク情報
55.
リンク情報 NSDictionary *fontAttributes1 =
[NSDictionary dictionaryWithObjectsAndKeys: @"http://www.apple.co. jp/" ,@"NSLinkAttributeName", ... ,nil ];
56.
デモ TEST2
57.
まとめ • NSAttributedString+CoreTextで簡単にきれい
なレイアウト • iOSではコンテキスト描画...。Macでは drawRect()とかあるし、シャドウも掛けられ たりするし...将来に期待!
58.
ありがとうございました
Editor's Notes
#2
\n
#3
\n
#4
\n
#5
\n
#6
\n
#7
\n
#8
\n
#9
\n
#10
\n
#11
\n
#12
\n
#13
\n
#14
\n
#15
\n
#16
\n
#17
\n
#18
\n
#19
\n
#20
\n
#21
\n
#22
\n
#23
\n
#24
\n
#25
\n
#26
\n
#27
\n
#28
\n
#29
\n
#30
\n
#31
\n
#32
\n
#33
\n
#34
\n
#35
\n
#36
\n
#37
\n
#38
\n
#39
\n
#40
\n
#41
\n
#42
\n
#43
\n
#44
\n
#45
\n
#46
\n
#47
\n
#48
\n
#49
\n
#50
\n
#51
\n
#52
\n
#53
\n
#54
\n
#55
\n
#56
\n
#57
\n
#58
\n
#59
\n
Download