Enviar pesquisa
Carregar
Cocoa勉強会201208
•
Transferir como KEY, PDF
•
8 gostaram
•
2,837 visualizações
Satoshi Oomori
Seguir
Cocoa勉強会2012年8月25日NSAttributedStringとCoreTextで簡単な組版
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 58
Baixar agora
Recomendados
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
CG2013 12
CG2013 12
shiozawa_h
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
Ssaw08 0916
Ssaw08 0916
Atsushi Tadokoro
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
Recomendados
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
CG2013 12
CG2013 12
shiozawa_h
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
Ssaw08 0916
Ssaw08 0916
Atsushi Tadokoro
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
a-hisame
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
aomori ringo
CG2013 03
CG2013 03
shiozawa_h
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
Yoichi Hirata
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
CG2013 05
CG2013 05
shiozawa_h
機械学習
機械学習
ssusere8ae711
CG2013 07
CG2013 07
shiozawa_h
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
necocen
Processing
Processing
Akifumi Nambu
CG2013 02
CG2013 02
shiozawa_h
FiltersでGLSLを楽しく学んじゃおう!
FiltersでGLSLを楽しく学んじゃおう!
Kazuya Hiruma
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
OpenGLと行列
OpenGLと行列
miyosuda
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
Mais conteúdo relacionado
Mais procurados
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
a-hisame
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
aomori ringo
CG2013 03
CG2013 03
shiozawa_h
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
Yoichi Hirata
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
CG2013 05
CG2013 05
shiozawa_h
機械学習
機械学習
ssusere8ae711
CG2013 07
CG2013 07
shiozawa_h
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
necocen
Processing
Processing
Akifumi Nambu
CG2013 02
CG2013 02
shiozawa_h
FiltersでGLSLを楽しく学んじゃおう!
FiltersでGLSLを楽しく学んじゃおう!
Kazuya Hiruma
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
OpenGLと行列
OpenGLと行列
miyosuda
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Mais procurados
(20)
今から始める Lens/Prism
今から始める Lens/Prism
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
CG2013 03
CG2013 03
Aaなゲームをjsで
Aaなゲームをjsで
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
Ekmett勉強会発表資料
Ekmett勉強会発表資料
CG2013 05
CG2013 05
機械学習
機械学習
CG2013 07
CG2013 07
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
Processing
Processing
CG2013 02
CG2013 02
FiltersでGLSLを楽しく学んじゃおう!
FiltersでGLSLを楽しく学んじゃおう!
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
OpenGLと行列
OpenGLと行列
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Semelhante a Cocoa勉強会201208
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
とあるFlashの自動生成
とあるFlashの自動生成
Akineko Shimizu
Python standard 2022 Spring
Python standard 2022 Spring
anyakichi
DTrace for biginners part(2)
DTrace for biginners part(2)
Shoji Haraguchi
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Yuto Takei
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Cocoa勉強会pdf関連
Cocoa勉強会pdf関連
OCHI Shuji
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
SORACOM, INC
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
IgChart 入門編
IgChart 入門編
Daizen Ikehara
Semelhante a Cocoa勉強会201208
(20)
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
C++0x 言語の未来を語る
C++0x 言語の未来を語る
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
中3女子でもわかる constexpr
中3女子でもわかる constexpr
とあるFlashの自動生成
とあるFlashの自動生成
Python standard 2022 Spring
Python standard 2022 Spring
DTrace for biginners part(2)
DTrace for biginners part(2)
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
クロージャデザインパターン
クロージャデザインパターン
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Cocoa勉強会pdf関連
Cocoa勉強会pdf関連
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
Aaなゲームをjsで
Aaなゲームをjsで
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Clojure programming-chapter-2
Clojure programming-chapter-2
IgChart 入門編
IgChart 入門編
Mais de Satoshi Oomori
Cocoa勉強会20140621 macとiosで共通のコード
Cocoa勉強会20140621 macとiosで共通のコード
Satoshi Oomori
Cocoa勉強会20140419ゲームをつくってみる
Cocoa勉強会20140419ゲームをつくってみる
Satoshi Oomori
Word net cocoa勉強会201306
Word net cocoa勉強会201306
Satoshi Oomori
Scene kit cocoa勉強会201306
Scene kit cocoa勉強会201306
Satoshi Oomori
Cocoa勉強会ビギナーズramディスクとコマンドファイル
Cocoa勉強会ビギナーズramディスクとコマンドファイル
Satoshi Oomori
Cocoa勉強会201302
Cocoa勉強会201302
Satoshi Oomori
Cocoa勉強会関西2012年5月
Cocoa勉強会関西2012年5月
Satoshi Oomori
Cocoa勉強会201203公開
Cocoa勉強会201203公開
Satoshi Oomori
Cocoa勉強会2011年11月
Cocoa勉強会2011年11月
Satoshi Oomori
Mais de Satoshi Oomori
(9)
Cocoa勉強会20140621 macとiosで共通のコード
Cocoa勉強会20140621 macとiosで共通のコード
Cocoa勉強会20140419ゲームをつくってみる
Cocoa勉強会20140419ゲームをつくってみる
Word net cocoa勉強会201306
Word net cocoa勉強会201306
Scene kit cocoa勉強会201306
Scene kit cocoa勉強会201306
Cocoa勉強会ビギナーズramディスクとコマンドファイル
Cocoa勉強会ビギナーズramディスクとコマンドファイル
Cocoa勉強会201302
Cocoa勉強会201302
Cocoa勉強会関西2012年5月
Cocoa勉強会関西2012年5月
Cocoa勉強会201203公開
Cocoa勉強会201203公開
Cocoa勉強会2011年11月
Cocoa勉強会2011年11月
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.
ありがとうございました
Notas do Editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Baixar agora