Slide 1

Slide 1 text

Animation prototyping potatotips #11

Slide 2

Slide 2 text

@yskm_ Profile • ࡾӜ ܚथ (yoshiki miura) • Cookpad Inc. (2014೥9݄~) • ϞόΠϧϑΝʔετࣨॴଐ • iOSΞϓϦ։ൃ • Pie

Slide 3

Slide 3 text

εΫϩʔϧϏϡʔͷ Ҿ͖Լ͛Ξχϝʔγϣϯͷϓϩτ࡞੒ with playground

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

PlaygroundͰΞΠίϯΛࢼ࡞

Slide 6

Slide 6 text

http://techlife.cookpad.com/entry/2014/11/12/170041

Slide 7

Slide 7 text

// όοξͷഎܠΛඳը͢Δ let rect = CGRectMake(0, 0, 96, 36) let roundCorner = UIRectCorner.TopLeft | UIRectCorner.BottomRight let roundSize = CGSizeMake(6.0, 6.0) let path = UIBezierPath(roundedRect: rect, byRoundingCorners: roundCorner, cornerRadii: roundSize) UIColor(red: 0.35, green: 0.78, blue:1.0, alpha: 1.0).setFill() path.fill() ! // จࣈΛඳը͢Δ let attrString = NSAttributedString( string: "͓͢͢Ί", attributes:[NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont.boldSystemFontOfSize(20.0)]) attrString.drawAtPoint(CGPointMake(6, 4))

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

var degree:CGFloat = 360.0 // <- ԁप (360.0) degree -= 90.0 var radian:CGFloat = ((degree) / 180.0 * CGFloat(M_PI)) var path = UIBezierPath() path.lineCapStyle = kCGLineCapRound path.moveToPoint(CGPoint(x: 0, y: 0)) //<- ઢͷ௕͞ path.addLineToPoint(CGPoint(x: 0, y: 10)) path.addArcWithCenter(CGPointMake(0, 16), radius: 7, startAngle: CGFloat(-M_PI_2), endAngle: CGFloat(radian), clockwise: true) //<- ԁͷେ͖͞ UIBezierPathͷ࡞੒

Slide 10

Slide 10 text

var angle = 0.75 var shapeLayer = CAShapeLayer() shapeLayer.path = path.CGPath shapeLayer.lineWidth = 2.0 shapeLayer.strokeColor = UIColor.blackColor().CGColor shapeLayer.fillColor = UIColor.clearColor().CGColor shapeLayer.bounds = CGPathGetBoundingBox(path.CGPath) shapeLayer.anchorPoint = CGPointMake(0.5, 0.7) shapeLayer.position = CGPointMake(100, 100) var transform = shapeLayer.transform shapeLayer.transform = CATransform3DRotate(transform, CGFloat(M_PI*angle), 0, 0, 1.0) ! canvas.layer.addSublayer(shapeLayer) CAShapeLayerͷ࡞੒

Slide 11

Slide 11 text

ϓϩύςΟΛௐ੔͢Δ

Slide 12

Slide 12 text

ϓϩδΣΫτϑΝΠϧʹҠ২ͯ͠ εΫϩʔϧϏϡʔͱ࿈ಈͤ͞Δ

Slide 13

Slide 13 text

Storyboard

Slide 14

Slide 14 text

ViewController.swift func scrollViewDidScroll(scrollView: UIScrollView) { var value = scrollView.contentOffset.y if(value <= 0 && value >= -50) { iconView.update(-value * 2)ɹ //※ΞΠίϯΛΞοϓσʔτ } else if(value <= -50) { iconView.update(100) } else if(value > 0) { iconView.update(0) } if (value < -50) { if(!isSearch) { UIView.animateWithDuration(0.3, animations: { self.searchBarView.alpha = 1.0 } ) isSearch = true } } else { if(isSearch) { UIView.animateWithDuration(0.3, animations: { self.searchBarView.alpha = 0.0 } ) isSearch = false } } } }

Slide 15

Slide 15 text

SearchIconView.swift func setup() { shapeLayer = CAShapeLayer() shapeLayer.path = self.drawPath(0.0).CGPath shapeLayer.lineWidth = 2.0 shapeLayer.strokeColor = UIColor(white: 0.5, alpha: 1.0).CGColor shapeLayer.fillColor = UIColor.clearColor().CGColor shapeLayer.bounds = CGPathGetBoundingBox(self.drawPath(370.0).CGPath) shapeLayer.anchorPoint = CGPointMake(0.5, 0.7) shapeLayer.position = CGPointMake(25, 12) var transform = shapeLayer.transform shapeLayer.transform = CATransform3DRotate(transform, CGFloat(M_PI)*angle, 0, 0, 1.0) self.layer.addSublayer(shapeLayer) }

Slide 16

Slide 16 text

func drawPath(degree: CGFloat) -> UIBezierPath { var dy:CGFloat = 0.0 var d:CGFloat = degree if(degree < 360.0) { dy = 0.0 d -= 90.0 } else { dy = (degree-360)*0.5 d = 270.0 } var radian:CGFloat = (d) / 180.0 * CGFloat(M_PI) var path = UIBezierPath() path.lineCapStyle = kCGLineCapRound path.addArcWithCenter(CGPointMake(0, 16), radius: 7, startAngle: CGFloat(-M_PI_2), endAngle: radian, clockwise: true) if(degree > 360.0) { path.moveToPoint(CGPoint(x: 0, y: 10)) path.addLineToPoint(CGPoint(x: 0, y: 10-dy)) } return path }

Slide 17

Slide 17 text

func update(value:CGFloat) { var degree:CGFloat = value * 3.7 shapeLayer.path = self.drawPath(degree).CGPath angle = value * 0.0075 var transform = CATransform3DIdentity CATransaction.begin() CATransaction.setAnimationDuration(0) shapeLayer.transform = CATransform3DRotate(transform, CGFloat(M_PI)*angle, 0, 0, 1.0) var py = value * 0.12 shapeLayer.position = CGPointMake(25, 12+py) CATransaction.commit() }

Slide 18

Slide 18 text

Finish!

Slide 19

Slide 19 text

Thank you for your attention.