ã·ã³ãã«ãªã¢ãã¡ãŒã·ã§ã³ãäœãæ¹æ³ã¯ãçãã誰ããç¥ã£ãŠããŸããã§ããããšãŠãä¿¡ããããªãã»ã©çŸããã¢ãã¡ãŒã·ã§ã³ãäœããããšæã£ããã©ãããŸããïŒ raywenderlich.comã®ããŒã ã¡ã³ããŒã§ããMarin Todorovããã¬ã€ã€ãŒãã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªã«ã€ããŠè©³ãããªãã°ã©ããªããšãéæã§ããã®ããæããã«ããŠãããŸãããã®ãã¬ãŒã³ããŒã·ã§ã³ã«éæ³ã¯å«ãŸããŸããââãã ãã¯ãã«ã§ãå°è±¡çãªã¢ãã¡ãŒã·ã§ã³ã ãããããŸãïŒ
ãã®è¬æŒã®ãµã³ãã«ã³ãŒã㯠GitHubã«ãããŸãã
iOS 9ã®æ°æ©èœ (0:35)
iOS 9ã§ã¯ãã¢ãã¡ãŒã·ã§ã³ã®ããã®æ°æ©èœã¯ãããŸã§å€ããããŸããã
æ°ããç¹ã®ã²ãšã€ãšããŠã¯ãUIViewAnimationOptions
ãOptionSetType
ã«ãªããŸãããä»ãŸã§ã¯ãããããã¹ã¯ã«ãã£ãŠçµã¿åãããããšã®ã§ããåãªãå€ã§ããããä»åããã¯ããã¹ãŠéåã®èŠçŽ ãšãªããŸããããã®ãããéåã®åœ¢ã§çµã¿åãããããšãã§ããŸããiOS 8ã§ã¯ããã¥ãŒã¢ãã¡ãŒã·ã§ã³ã«äœããªãã·ã§ã³ãäžããããªãå Žåãnil
ãæå®ããå¿
èŠããããŸãããã空éåã宣èšããããã®è§æ¬åŒ§ãæå®ããã ãã§ããã®ã§ãã
iOS 9ã§ã¯ãè§æ¬åŒ§ãšãšãã«Repeat
ãšCurveLinear
ãšãã£ããªãã·ã§ã³ãçµã¿åãããããšãã§ããŸããããã²ãšã€ã®ãªãã·ã§ã³ã®ã¿ã§è¯ãå Žåã¯ãã¡ãã£ãšå¥åŠã«èŠããŸãããè§æ¬åŒ§ã¯èŠããŸããããã®ãªãã·ã§ã³ãéåã®æ£ããèŠçŽ ã§ããã°ãèªåçã«å€æããæ£åžžã«åŠçãããŸãã
// iOS 8
UIView.animateWithDuration(1.0, delay: 0.0, options: nil, animations {
v.center.y += 100.0
}, completion: nil)
// iOS 9
UIView.animateWithDuration(1.0, delay: 0.0, options: [], animations {
v.center.y += 100.0
}, completion: nil)
ããã²ãšã€ã®æ°ããç¹ã¯ãã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ã«ãããŸãã
iOS 9ã§ã¯äœã¬ãã«ã®APIãšããŠCASpringAnimation
ãã¬ã€ã€ãŒã«å¯ŸããŠçšããããšãã§ããŸããä»ãŸã§ããã®ã¯ã©ã¹ã¯iOSå
ã«ãããŸãããããã©ã€ããŒãã¯ã©ã¹ã§ãããå®ã¯ãå
éšã§ä»ãŸã§ã®ããªãã®ã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ãæ
ã£ãŠããã®ã¯ãã®ã¯ã©ã¹ã ã£ãã®ã§ããä»å¹ŽAppleã¯æã
ã«ãããéæŸããŠãããããããªãŒãã³ãœãŒã¹ã®ã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³å®è£
ã䜿ãããšãæ¢ããããŸãã
ããä»ãŸã§ã«ã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ãããŸã䜿ã£ãããšããªãå Žåãã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ã«ã¯è³ªé(mass)
ãã¹ããªã³ã°ã®ç¡¬ã(stiffness)
ãç²æ§(damping)
ãæå®ããå¿
èŠãããããšãç¥ã£ãŠãããŠãã ãããäžåºŠãããã®å€ãæå®ããåŸã¯ãsettlingDuration
ãååŸããããšãã§ããŸããããã¯èªã¿åãå°çšã®ããããã£ã§ããã®ã¢ãã¡ãŒã·ã§ã³ãäœç§ã§èœã¡çãããäŒããŠãããŸãã
// iOS 8
UIView.animateWithDuration(1.0, delay: 0.0,
usingSpringWithDamping: 0.25, initialSpringVelocity: 0.12,
options: [], animations: {
v.center.x += 100.0
}, completion: nil)
// iOS 9
class CASpringAnimation : CABasicAnimation {
var mass: CGFloat
var stiffness: CGFloat
var damping: CGFloat
var initialVelocity: CGFloat
var settlingDuration: CFTimeInterval { get }
}
ã€ã³ãããã¯ã·ã§ã³ (4:46)
iOS 7ã§ãç§ãã¡ã¯ã¢ããªãæ°ããããžã¥ã¢ã«ã¹ã¿ã€ã«ã«ç§»è¡ããŸãããããããããã¢ããªããããšèªèããããããªã°ã©ãã£ã«ã«ã¹ã¿ã€ã«ã§ãªãå Žåããããã€ã³ãã£ãŒãºã®éçºè ã«ãããã®ããAppleã«ãããã®ããå€æããæ¹æ³ã¯ãããŸãããã«ã©ãã«ãªããã¹ãã§ã¢ããªã®è²åããå€ããããšã¯ã§ããŸãããæ¬åœã«å€§ããªéããèŠãããã®ã§ããã°ãã¢ãã¡ãŒã·ã§ã³ãå ããå¿ èŠããããŸãã
ã¢ãã¡ãŒã·ã§ã³ã¯ãããªãã®ãã©ã³ãããã³ã¹ã¿ã€ã«ã«ã€ããŠã®å šãŠãäŒããéã«ã倧ããªéããçã¿åºããŸããããã¯è¯ãããšã§ããââã¿ãªãã誰ãããããã€ãã®ã¢ãã¡ãŒã·ã§ã³ãäœãæ¹æ³ãç¥ã£ãŠããŸãã
ãã¥ãŒã§ããã°ãèµ€ãåè§åœ¢ãæ°ãã€ã³ãå³ã«åããã ãã®ãããªã·ã³ãã«ãªã¢ãã¡ãŒã·ã§ã³ãªã©ãïŒããããªããSwiftã䜿ã£ãŠããªãå Žåããããã䜿ãã¹ãã§ããïŒåé¡ã¯ãç§ãæãã«ãå€ãã®äººãå³åœ¢ãç»é¢ã暪åãããããã¯ãã§ãŒãã€ã³ã»ã¢ãŠããããããªã¢ãã¡ãŒã·ã§ã³ã®ã¿ã§çµããã«ããŠããŸãããšã§ãã
ããããªããããè€éãªããšãããããããšæã£ããšãã¯Stack Overflowã«ã¢ã¯ã»ã¹ããŠãå ·äœçãªåçã«èŸ¿ãçãããšãã§ããã§ããããããã§ãã¢ãã¡ãŒã·ã§ã³ãäœæããããšã¯ã§ããŸãããããããã以å€ã®ããšãããããšãã«ã¯ãStack Overflowã«ãŸãå¥ã®è³ªåãæçš¿ããå¿ èŠããããŸãã
å®éš ð¥ (7:20)
ã¢ãã¡ãŒã·ã§ã³ãžã®ã¢ãããŒãã®æãè¯ãæ¹æ³ã¯å®éšããããšã ãšç§ã¯èããŸãã
Core Animationã¯ãç¹ã«UIKitã§ããããªãã®ã¢ããªã®äžã§ã¢ãã¡ãŒã·ã§ã³ãäœãã®ã«äœ¿ãããšãã§ãããšãŠãå€ãã®æ©èœãæ瀺ããŠããŸããç§ã¯ãããéåžžã«å¹æçã§çŽ æŽããããã®ã ãšèããŠããŸãã
ä»ãããããªãã«ã§ãã3ã€ã®ããšãã玹ä»ããŸãããŸãããããããªããããã£ãå®éšããŠã¿ãŸãããã次ã«ãæ°ããã¬ã€ã€ãŒãã€ãã£ãŠã¿ãŸããããæåŸã«ãã¢ãã¡ãŒã·ã§ã³ã®æéãèšå®ãã以äžã®ãæ ã«ãšããããªãèãã§å¥æãªããšããã£ãŠã¿ãŸãããããã®è¬æŒã§ã¯ãç§ã¯EasyAnimationã䜿ããŸããããã¯UIKitã«2ã3ã®æ©èœãè¿œå ããã ãã®ã©ã€ãã©ãªã§ãã
ã㢠(8:23)
ãã®ãã¢å ã§ã¯ãEasy Animationãã©ããªããšãã§ããã®ã2ã3ã®äŸã玹ä»ããããšæããŸãã
ããã«ãã©ã¹ãã¿ã³ãç»é¢äžã«çœ®ãããŠããã¢ããªããããŸããããããããããæŒããããšãã«ã¯äœãããã®ã¢ãã¡ãŒã·ã§ã³ãè¿œå ãããã®ã§ãããã
ãŠãŒã¶ãŒã€ã³ã¿ãã§ãŒã¹ã«ãããã¢ãã¡ãŒã·ã§ã³ã¯éåžžããŠãŒã¶ãŒã«ä»äœããèµ·ãã£ãŠãããšãããã£ãŒãããã¯ãæ瀺ããããã«äœ¿ããããã®ã§ããã§ãã®ã§ç§ã¯ãããã§ã¯ãã¿ã³ãæŒãããæã«ãã¿ã³ãããŠã³ã¹ãããããšæããŸãã
ããã«ã¯Easy Animationã®UIView.animateAndChainWithDuration
ãçšããŸããEasy Animationã¯ããã§ã«UIKitã«ãŠæäŸãããŠãããã®ã«ãŽã£ãããª2, 3ã®ã¡ãœãããè¿œå ãããã®ã§ãããã®ã¡ãœããã¯é åºã ã£ãã¢ãã¡ãŒã·ã§ã³ã®äœæãéåžžã«ç°¡åã«ããŠããããããæ§ã
ãªå®éšãçŽ æ©ãè¡ãããšãã§ããŸãã
delay
ã0.25ã«ããCurveEaseOut
ã䜿ã£ãŠã¿ãŸããããã¯ã¢ãã¡ãŒã·ã§ã³ã®å¹æã®å¹ãå
·åãããã®çµããã«åãã£ãŠé
ããããã®ã§ããéãæ£æ¹åœ¢ãä»åã®ãã¿ã³ã§ããããã§ã¯åçŽã«ãå°ãçž®å°ããããå€åœ¢ããããŸããEasy Animationã®ãããã§ãæåã®ã¢ãã¡ãŒã·ã§ã³ãçµãã£ãåŸã«ãç°¡åã«æ¬¡ã®ã¢ãã¡ãŒã·ã§ã³ãé£éããŠéå§ããããšãã§ããŸããå€åœ¢ã®ããšã¯ãå°ãå転ã»æ¡å€§ããããã«ã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ãèšå®ããŸãã
UIView.animateAndChainWithDuration(0.25, delay: 0.0, options: .CurveEaseOut, animations: {
self.blueSquare.transform = CGAffineTransformMakeScale(0.8, 0.8)
}, completion: nil).animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.33, initialSpringVelocity: 0.0, options: nil, animations: {
self.blueSquare.transform = CGAffineTransformConcat(
CGAffineTransformMakeScale(1.33, 1.33),
CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
)
}, completion: nil)
1. ããããã£ã®å®éš (11:47)
ç§ã¯å
ã»ã©ããŸãããããã£ã®å®éšããããããšèšããŸããããCALayer
ã«ã¯ãããããå®éšã§ããå€ãã®ããããã£ããããŸãããã®ããããã£ã«ã€ããŠã¯å
šãŠããã¥ã¡ã³ãã®äžã§èª¬æãããŠããŸãã
ãã®ããããã£ã®äžã«ã¯ãã¢ãã¡ãŒã·ã§ã³ãäœãéã«äœ¿ããããšããããã¥ããcornerRadius
ã®ãããªããããã£ããããŸããã§ãããããã£ãããããã£ããªããªãæ Œå¥œããããšãããŠãããŸãã
ãã¢: CALayer
(12:18)
ã§ã¯ãcornerRadius
ãã¢ãã¡ãŒã·ã§ã³ãããã¢ãã¡ãŒã·ã§ã³ãã§ãŒã³ã®ãµãã€ç®ã§50.0
ã«ã»ããããŸãã
æåã¯0.0ã«ããŠãããŸããæ¯åã¢ãã¡ãŒã·ã§ã³ãèµ°ããã³ããŸãæ£æ¹åœ¢ã«æ»ããŸãããŒãªãŒã®ãããŸãã®ãããªåãã¯ããããã®ããããã£ã®çµã¿åããã«ãã£ãŠäœãããšãã§ããŸãã
説æãšããŠã¯ïŒç¹ãããŸããã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ã䜿ã£ãŠããããšãšãè§ãäžžãããã®ãšå転ãããã®ãåæã«è¡ã£ãŠããããšã§ãããã®ããã«ããŠãæ¬åœã«æ Œå¥œããã¢ãã¡ãŒã·ã§ã³ãäœãããšãã§ããŸãããããã«å¢çç·ãã¢ãã¡ãŒã·ã§ã³ãããããšãã§ããŸããããã§ã¯å¢çç·ãã€ããŠãããåã«åãé€ãããšã§ããšããã³ã°ã®ãããªå¹æãã€ããããã«ããŸããã
UIView.animateAndChainWithDuration(0.25, delay: 0.0, options: .CurveEaseOut, animations: {
self.blueSquare.transform = CGAffineTransformMakeScale(0.8, 0.8)
self.blueSquare.layer.cornerRadius = 0.0
self.blueSquare.layer.borderWidth = 5.0
}, completion: nil).animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.33, initialSpringVelocity: 0.0, options: nil, animations: {
self.blueSquare.transform = CGAffineTransformConcat(
CGAffineTransformMakeScale(1.33, 1.33),
CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
)
self.blueSquare.layer.cornerRadius = 50.0
self.blueSquare.layer.borderWidth = 0.0
}, completion: nil)
ãã¢: CAShapeLayer
(14:49)
ããã«å¥æãªã¬ã€ã€ãŒã®ããããã£ãèŠãŠã¿ãŸãããã
CAShapeLayer
ã§ã¯ãlineDashPattern
ãšlineDashPhase
ã«ããmarching antsãäœãããšãã§ããŸãã
äŸãã°åçå
ã«éžæç¯å²ãäœã£ããšãããšããã®éžæç¯å²ã¯ç Žç·ã®é·æ¹åœ¢ã§è¡šãããŸãããããã§ããã®äŸã§ã¯åãåãããŒã«ãäœã£ãŠãããšããŸããããéžæç¯å²ã¯CAShapeLayer
ã§äœããlineDashPattern
ãèšå®ããããšãã§ããŸããlineDashPattern
ã¯ç Žç·ã®ãã¡äœãã¯ã»ã«ãæããŠäœãã¯ã»ã«ééã空ãããæå®ããããšãã§ããŸãã
ããã«ãlineDashPhase
ãçšããããšã«ãã£ãŠã¢ãã¡ãŒã·ã§ã³ãããããšãã§ããŸããããã¯Core Annimationã«ãã®ãã¿ãŒã³ããã€æç»ãå§ããããäŒãããã®ã§ãã
override func viewWillAppear(animated: Bool) {
...
view.layer.addSublayer(selection)
//configure the dash pattern
selection.lineDashPattern = [5, 3]
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
...
//let the ants march!
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveLinear | .Repeat, animations: {
self.selection.lineDashPhase = 8.0
}, completion: nil)
}
2. ã¬ã€ã€ãŒã®å®éš (17:43)
2ã€ç®ã«ããããšã¯ãã¬ã€ã€ãŒã䜿ã£ãŠå®éšããããšã§ããåãªãCALayer
ãCAShapeLayer
以å€ã«ããã¬ã€ã€ãŒã«ã¯ããã€ãã®çš®é¡ããããŸãããããŠããããã®å€ãã¯ã¢ãã¡ãŒã·ã§ã³ã§ãããããªç¹å¥ãªããããã£ãæããŠããŸããç§ã®ãæ°ã«å
¥ãã¯CAReplicatorLayer
ã§ãã
ãã¢: CAReplicatorLayer
(17:59)
CAReplicatorLayer
ã¯åºæ¬çã«ã¯ã³ã³ãããšãªãã¬ã€ã€ãŒã§ãäœãã¬ã€ã€ãŒãå
¥ããå Žåãããã®ã³ããŒãã€ãã£ãŠãããŸããç»é¢ã«CAReplicatorLayer
ãè¿œå ããããã«ã¬ã€ã€ãŒãå
¥ããã°ããã®ã¬ã€ã€ãŒã¯ç»é¢äžã«è¡šç€ºãããŸãããã®äŸã§ã¯ãè€è£œããããåãªãããããè¡šãã¬ã€ã€ãŒãã²ãšã€äœããã¹ã±ãŒã«ããããã«ã¢ãã¡ãŒã·ã§ã³ãããŸãã
//add a replicator layer
let r = CAReplicatorLayer()
r.frame = view.bounds
view.layer.addSublayer(r)
//make a simple dot layer
let dot = CALayer()
dot.bounds = CGRect(x: 0.0, y: 0.0, width: 5.0, height: 5.0)
dot.position = CGPoint(x: 18.0, y: view.center.y)
dot.backgroundColor = UIColor.greenColor().CGColor
dot.borderColor = UIColor(white: 1.0, alpha: 1.0).CGColor
dot.borderWidth = 1.0
dot.cornerRadius = 2.0
r.addSublayer(dot)
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseOut | .Repeat | .Autoreverse, animations: {
dot.transform = CATransform3DMakeScale(1.4, 10, 1.0)
}, completion: nil)
ãã®åããŠããããããèŠãæããããã¯Siriãšãã®æ£åŒŠæ³¢ãé£æ³ããŸãããã§ãã®ã§ãCAReplicatorLayer
ã䜿ã£ãŠãã£ãšããèŠããããã«ããŠã¿ãŸãããã
ã¬ã€ã€ãŒãReplicatorã¬ã€ã€ãŒã«è¿œå ããéã¯ããã®ã¬ã€ã€ãŒãã©ãããããReplicatorã¬ã€ã€ãŒã«äŒããå¿ èŠããããŸãã
ãŸãã¯ããããã®ã³ããŒã35åã»ãããšæããŸããããã§ãããããã®ã³ããŒã®éã«ã¯æéã®é 延ãäžããŠã¿ãŸãããããªãªãžãã«ã®ã¬ã€ã€ãŒã«å€æŽãå ãããšãReplicatorã¬ã€ã€ãŒãå šãŠã®ã³ããŒã«å¯ŸããŠåãããšãããŠãããŸãã
äŸãã°ãã¢ãã¡ãŒã·ã§ã³ã®ã¿ã€ãã³ã°ãã³ããŒããã³ããŒã«ã0.1ç§ã®é 延ã§äŒãã£ãŠããããã«ããŠã¿ãŸããã€ãŸããããã³ããŒã®ã¢ãã¡ãŒã·ã§ã³ã¯ã²ãšã€åã®ã³ããŒãã0.1ç§é ããŠå§ãŸãããšã«ãªããŸãã
æåŸã«ãinstantTransform
ããããã£ã«ãã£ãŠåã³ããŒã®äœçœ®ãèšå®ããããšãã§ããŸããããã§ã¯20ãã€ã³ãå³ã«ç§»åãããããšã«ããŸããããã«ãããã³ããŒã¯ãã²ãšã€åã®ã³ããŒã®20ãã€ã³ãå³ã«é
眮ãããããšã«ãªããŸããããã«ãåã³ããŒã®äžéã®äœçœ®ãã¢ãã¡ãŒã·ã§ã³ãããããšãã§ããŸãã
r.instanceCount = 35
r.instanceDelay = 0.1
r.instanceTransform = CATransform3DMakeTranslation(20.0, 0.0, 0.0)
UIView.animateWithDuration(1.25, delay: 0.0, options: .Repeat | .Autoreverse, animations: {
r.instanceTransform = CATransform3DMakeTranslation(10.0, 0.0, 0.0)
}, completion: nil)
ãã¢: ããŒãã«ãã¥ãŒã®ã¢ãã¡ãŒã·ã§ã³ (21:55)
ç§ã¯åéãšãšãã«Skyscanner appãèŠãŠããŸãããããã¯ãã©ã€ãã®æ€çŽ¢çµæã衚瀺ããŠããããã®ã§ããç¥ãããå°çå°ãæå®ããã°ããã®ãã©ã€ãã®æå»è¡šãèŠãããšãã§ããŸãããã®äžããã²ãšã€ãã¯ãªãã¯ãããšãæ°ããç»é¢ãããã·ã¥ãããŠãåã®ç»é¢ãšåããã©ã€ãã®çµæãç»é¢ã®äžçªäžã«ããã®äžã«è©³çŽ°ã衚瀺ãããŸãã
ãã®ããã«è€æ°ã®ãã¥ãŒã³ã³ãããŒã©ãããå Žåãç»é¢äžã§ãããã®é·ç§»ãã¢ãã¡ãŒã·ã§ã³ãããã¹ãã§ããä»ã®å Žåã ãšæåã®ãã¥ãŒãå·Šã«è¡ããä»ã®ãã¥ãŒãå³ããã¹ã©ã€ãããŠããŸããããç§ã¯ããã«æ Œå¥œã®ããã¢ãã¡ãŒã·ã§ã³ãšããŠãéžæãããè¡ã®ã¹ãããã·ã§ãããåããé·ç§»ã«ã®ã¿äœ¿ããã¥ãŒãäœãããããã¹ã¯ãªãŒã³ã«å ããããã«ããŸãããSkyscannerã¯åãããšããã£ãŠããŸãã
ãã©ã€ããéžæãããšããã®ãã©ã€ãã瀺ãè¡ã¯ã¹ã¯ãªãŒã³ã«æ®ããç»é¢ã®äžçªäžã«ç§»åãããã®åŸã«è©³çŽ°ãèåŸã«ã¹ã©ã€ãããŠããŸãããŸããããŒãã«ãã¥ãŒããã»ã«ãååŸããsnapshotViewAfterScreenUpdates
ãåŒã¶ããšã§ãã»ã«ã®ã³ããŒãæ°ããUIView
ãšããŠåŸãããšãã§ããŸããããããããããããã©ã³ãžã·ã§ã³ã³ã³ãããã¥ãŒã«è¿œå ãããã§ãŒãã¢ãŠãããã®åŸåé€ããããã«ããŸãã
3. äœã§ãå®éšããã (24:28)
æåŸã®äŸã¯ãäœã§ãå®éšãããããšããããšãäŒããããšã«ãããŸããäœã§ããšã¯ãèããããšããªããããªããã°ã«ç®ãéãããããã¯Appleã®ããã¥ã¡ã³ããèŠããããšããæå³ã§ããç§ãèŠã€ããã®ã¯ãæ¬åœã«æ·±ãã«åãŸã£ãŠãããã®ã§ãå®éã«iPhoneäžã§åäœãããã®ã«å°ãæéãããããŸããã
ããã¯ãåçãå«ãæçš¿ã®ãªã¹ãããããã¿ãããããæã«ã«ã¹ã¿ã ãã¥ãŒã³ã³ãããŒã©ãã©ã³ãžã·ã§ã³ã䜿ããå¥æãªæ¹æ³ã§åçã®è¡šç€ºã»é衚瀺ãè¡ãäŸã§ãã
Core Imageã¯ç»åã®é·ç§»ãCore Image transition filtersã䜿ã£ãŠè¡ãæ¹æ³ãæäŸããŠããŸãã
ãã¹ã¯ãäžããããšã§ãã²ãšã€ã®ç»åããä»ã®ç»åãžã®ãã©ã³ãžã·ã§ã³ããããããšãã§ããŸããã§ãã®ã§ããã¹ã¯ãçšããã©ããªã«ã¹ã¿ã ãã£ã«ã¿ã§ãäœãããšãã§ããŸãããã¹ã¯ã¯ã°ã¬ãŒã®ç»åã§ããã°äœã§ãæ§ããŸããããã©ã³ãžã·ã§ã³ã§ã¯ãŸãé»ãéšåã衚瀺ããã次ã«ç°è²ã®éšåããããŠæåŸã«çœãéšåã衚瀺ãããŸãã
å šãŠã®ãã£ã«ã¿ãŒé©çšæžã¿ã®ãã¬ãŒã ãäœãããã«ãåžžã«ãã£ã«ã¿ãŒããããå¿ èŠããããŸããç§ãäœã£ããã¹ã¯ã¯ãã¡ãã«ãããŸãã
ããããšãããããŸããã
翻蚳ïŒå²©è°· æ Akira Iwaya æ ¡æ£ã»æ ¡é²ïŒæ¬æçŸçµµ Mie Hommura
About the content
This talk was delivered live in June 2015 at AltConf. The video was recorded, produced, and transcribed by Realm, and is published here with the permission of the conference organizers.