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
CALayerを見直す
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
taminif
November 28, 2016
Technology
380
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CALayerを見直す
関西モバイルアプリ研究会 #20
taminif
November 28, 2016
More Decks by taminif
See All by taminif
React Native New Architecture 移行実践報告
taminif
1
260
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
330
PuppeteerとPlaywrightの15日間の演劇 / relation of Puppeteer and Playwright
taminif
3
2.3k
Redashの開発はじめました / How to get started Redash development
taminif
0
810
私の生活を変えたHeadless Chrome / Headless Chrome who changed my life
taminif
3
540
WebSocketをiOSに持ち込んで辛い思いをした経験がありますか!? / have you painful experience in web socket?
taminif
3
6.3k
LINEで馬券を購入する / Purchase a betting ticket at LINE
taminif
1
1.7k
SkyWayで一年間運用してきたけどWebRTCってつらいんじゃないの
taminif
2
1k
オンライン英会話とSkyWay
taminif
0
550
Other Decks in Technology
See All in Technology
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
670
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.2k
TypeScript入門 2026
recruitengineers
PRO
3
560
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
110
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
200
第3回しろおびセキュリティスポンサーセッション
log0417
0
170
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
280
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
160
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
730
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
220
強化学習「理論」入門
enakai00
3
3.6k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
450
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
30 Presentation Tips
portentint
PRO
1
370
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
KATA
mclloyd
PRO
35
15k
Abbi's Birthday
coloredviolet
3
9.3k
Building Applications with DynamoDB
mza
96
7.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
Transcript
CALayerΛݟ͢ ؔϞόΠϧΞϓϦݚڀձ #20 2016/11/28 େౡ ޫو
ࣗݾհ • ΣϒϦΦגࣜձࣾ • WEBΤϯδχΞ • ΞϓϦΤϯδχΞ ʢࣗশʣ • 8݄ʹΞϓϦΛ
ϦϦʔε͠·ͨ͠ʂ
CALayer
Core Animation Layer • άϥϑΟοΫඳըͷج൫ • ΞχϝʔγϣϯॲཧΛ୲ • iOSʹඪ४Ͱࡌ͞Ε͍ͯΔ
UIViewʹαϙʔτ
Έͳ͞ΜԿؾͳ͍ͬͯ͘ Δ͔ͱࢥ͍·͢ɻ
CALayerͰͬͯΔͣ • ӨΛམͱ͢ • ઢΛ͚ͭΔ • ؙ֯ʹ͢Δ • ʑɾɾɾ
CALayerΛ༻ͨ͠খٕΛ ຊհ͠·͢
1. CALayerΛܧঝͨ͠αϒΫϥε
CALayerΛܧঝͨ͠αϒΫϥε • CAEmitterLayer • CAGradientLayer • CAMetalLayer • CAEAGLLayer/ CAOpenGLLayer
• CAReplicatorLayer • CAScrollLayer • CAShapeLayer • CATextLayer • CATiledLayer • CATransformLayer • QCCompositionLayer
CALayerΛܧঝͨ͠αϒΫϥε • CAEmitterLayer • CAGradientLayer • CAMetalLayer • CAEAGLLayer/ CAOpenGLLayer
• CAReplicatorLayer • CAScrollLayer • CAShapeLayer • CATextLayer • CATiledLayer • CATransformLayer • QCCompositionLayer
CATextLayer override func viewDidLoad() { super.viewDidLoad() let textLayer = CATextLayer()
textLayer.frame = textView.bounds let string = "Hello! Can I have a Tall Caramel Macchiato?" textLayer.string = string let fontName:CFString = "Noteworthy-Light" as CFString let fontSize:CGFloat = 14.0 textLayer.font = CTFontCreateWithName(fontName, fontSize, nil) textLayer.foregroundColor = UIColor.darkGray.cgColor textLayer.isWrapped = true textLayer.alignmentMode = kCAAlignmentLeft textLayer.contentsScale = UIScreen.main.scale textView.layer.addSublayer(textLayer) }
2. AVPlayerLayer
AVPlayerLayer • AVFoundationʹؚ·ΕΔCALayerαϒΫϥε • mp4Λ࠶ੜͰ͖Δ • Layerͱͯ͠͏ͨΊʹҰඞཁ
AVPlayerLayer Class final class AVPlayerView : UIView { override public
class var layerClass: Swift.AnyClass { get { return AVPlayerLayer.self } } fileprivate var playerLayer: AVPlayerLayer { return self.layer as! AVPlayerLayer } func player() -> AVPlayer { return playerLayer.player! } func setPlayer(_ player: AVPlayer) { playerLayer.player = player } func setVideoFillMode(_ fillMode: String) { playerLayer.videoGravity = fillMode } func videoFillMode() -> String { return playerLayer.videoGravity } }
AVPlayerLayer Layer let path = Bundle.main.path(forResource: "cat", ofType: "mp4") let
fileURL = URL(fileURLWithPath: path!) let avAsset = AVURLAsset(url: fileURL, options: nil) let playerItem = AVPlayerItem(asset: avAsset) let videoPlayer = AVPlayer(playerItem: playerItem) let layer = playerView.layer as! AVPlayerLayer layer.videoGravity = AVLayerVideoGravityResizeAspect layer.player = videoPlayer videoPlayer.play()
3. ӨΛଆʹམͱ͢
αϯϓϧίʔυ let subLayer:CALayer = CALayer.init() subLayer.frame = image.bounds image.layer.addSublayer(subLayer) subLayer.masksToBounds
= true let size:CGSize = subLayer.bounds.size var x:CGFloat = -10.0 var y:CGFloat = -10.0 let pathRef:CGMutablePath = CGMutablePath() pathRef.move(to: CGPoint(x: x, y: y)) x += size.width + 10.0 pathRef.addLine(to: CGPoint(x: x, y: y)) y += 10.0 pathRef.addLine(to: CGPoint(x: x, y: y)) x -= size.width pathRef.addLine(to: CGPoint(x: x, y: y)) y += size.height pathRef.addLine(to: CGPoint(x: x, y: y)) x -= 5.0 pathRef.addLine(to: CGPoint(x: x, y: y)) y -= size.height pathRef.addLine(to: CGPoint(x: x, y: y)) pathRef.closeSubpath() subLayer.shadowOffset = CGSize(width: 5, height: 5) subLayer.shadowColor = UIColor.black.cgColor subLayer.shadowOpacity = 0.5 subLayer.shadowPath = pathRef
Ͳ͏͍ͬͯΔ͔ 7JFX -BZFS - B Z F S
͋Γ͕ͱ͏͍͟͝·ͨ͠