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
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
250
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
320
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.2k
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
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
820
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
140
Claude Codeとハーネスについて考えてみる
oikon48
18
8.8k
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.3k
初めてのDatabricks勉強会
taka_aki
2
240
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
150
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
3.8k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
3.1k
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
160
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
220
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3k
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
3.6k
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
560
Making the Leap to Tech Lead
cromwellryan
135
10k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Invisible Side of Design
smashingmag
301
52k
A better future with KSS
kneath
240
18k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
310
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
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
͋Γ͕ͱ͏͍͟͝·ͨ͠