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
tvOS Workshop
Search
Ben Scheirman
October 12, 2016
Programming
1
140
tvOS Workshop
A 1-day workshop given to attendees of Pragmaconf '16 in Verona, Italy.
Ben Scheirman
October 12, 2016
Tweet
Share
More Decks by Ben Scheirman
See All by Ben Scheirman
A Promise for a Better Future
subdigital
0
140
Bézier Curves
subdigital
1
5.1k
Buckets of Code
subdigital
0
1.9k
Building 5 Calls for iOS
subdigital
0
100
Swift on Linux
subdigital
1
820
Swift Solutions
subdigital
2
440
iOS 8 Networking
subdigital
4
900
iOS 8 App Extensions
subdigital
1
370
Effective Networking with iOS 8 and Swift
subdigital
4
1.7k
Other Decks in Programming
See All in Programming
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1.1k
return文におけるstd::moveについて
onihusube
1
1.4k
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
590
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.4k
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
3
300
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
rails newと同時に型を書く
aki19035vc
5
710
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
880
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1.1k
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
1.9k
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Visualization
eitanlees
146
15k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Bash Introduction
62gerente
610
210k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
GitHub's CSS Performance
jonrohan
1030
460k
The Cult of Friendly URLs
andyhume
78
6.1k
Transcript
None
None
None
None
None
A New Platform
Not just a bigger screen. • Central place in home
• The hub for media • Families
Refreshing Stuff
One Screen Size* *(for now) 1920 x 1080 16:9
One Image Scale
One Image Scale
Always Connected…
Not So Refreshing…
Overscan 90 pt gutter on sides 60 pt gutter top/bottom
None
Input
None
None
None
?
None
Design Considerations
None
10-feet away
None
•Provide a single focus point. •Keep the background simple. •Use
words only when they’re essential or part of a logo. •Don’t include screenshots. •Keep icon corners square.
None
None
None
2 UI Paradigms
UIKit TVML
UIKit UIViewController UIView UIButton UILabel UIImageView
JavaScript TVML XML
TVML <document> <loadingTemplate> <activityIndicator> <text>Hello World!</text> </activityIndicator> </loadingTemplate> </document>
<document> <stackTemplate> <banner> <title>Available Action Movies</title> </banner> <collectionList> <shelf> <section>
<lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274"/> <title>Movie 1</title> </lockup> <lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274" /> <title>Movie 2</title> </lockup> </section> </shelf> </collectionList> </stackTemplate> </document>
<document> <stackTemplate> <banner> <title>Available Action Movies</title> </banner> <collectionList> <shelf> <section>
<lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274"/> <title>Movie 1</title> </lockup> <lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274" /> <title>Movie 2</title> </lockup> </section> </shelf> </collectionList> </stackTemplate> </document>
function playMedia(extension, mediaType) { var videourl = baseURL + extension;
var singleVideo = new MediaItem(mediaType, videourl); var videoList = new Playlist(); videoList.push(singleVideo); var myPlayer = new Player(); myPlayer.playlist = videoList; myPlayer.play(); }
None
https://developer.apple.com/library/content/samplecode/TVMLCatalog/Introduction/ Intro.html
None
Focus
None
Am I focusable? canBecomeFocused? userInteractionEnabled? visible?
Am I focusable? po [view _whyIsThisViewNotFocusable]
None
None
None
magic? !
None
None
None
None
None
None
.sectioned
.inset
Project Setup
Project Setup ViewController.swift RSSParser.swift RSSEntry.swift iTunesClient.swift
Project Setup E