DEV Community

Lankinen
Lankinen

Posted on

CS193p Notes - Lecture 5: ViewBuilder + Shape + ViewModifier

Access control

  • private doesn't allow anyone outside the struct/class access it
  • private(set) means that setting is private but reading is not meaning that anyone can read it

ViewBuilder (12:05)

@ViewBuilder can be added to any function that returns a view. If there is a list of views it combines them into one.

"The contents of a @ViewBuilder is a list of Views. No need to type return. Cannot use vars.

@ViewBuilder func front(of card: Card) -> some View { RoundedRectangle(cornerRadius: 10) RoundedRectangle(cornerRadius: 10).stroke() Text(card.content) } 

Shape (20:22)

CG = Core Graphics

import SwiftUI struct Pie: Shape { var startAngle: Angle var endAngle: Angle var clockwise: Bool = false func path(in rect: CGRect) -> Path { let center = CGPoint(x: react.midX, y: react.midY) let radius = min(rect.width, rect.height) / 2 let start = CGPoint( x: center.x + radius * cos(CGFloat(startAngle.radians)), y: center.y + radius * sin(CGFloat(startAngle.radians)) ) var p = Path() p.move(to: center) p.addLine(to: start) p.addArc( center: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise ) p.addLine(to: center) return p } 
  • 0 degrees is to right
  • 0x0 is in left top corner and increases by going down and right

ViewModifier (41:54)

  • There are two things that can be animated: shapes and views.
  • Animating views happens in ViewModifier
  • Modifier can for example make any view to look like a card, cardify
Text("Ghost").modifier(Cardify(isFaceUp: true)) struct Cardify: ViewModifier { var isFaceUp: Bool func body(content: Content) -> some View { ZStack { if isFaceUp { RoundedRectangle(cornerRadius: 10).fill(Color.white) RoundedRectangle(cornerRadius: 10).stroke() content } else { RoundedRectangle(cornerRadius: 10) } } } } 
Text("Ghost").cardify(isFaceUp: true) extension View { func cardify(isFaceUp: Bool) -> some View { return self.modifier(Cardify(isFaceUp: isFaceUp)) } } 

@RealLankinen

Originally published here

Top comments (0)