SlideShare a Scribd company logo
1 of 57
Download to read offline
CS193P - Lecture 5
iPhone Application Development

Views
Drawing
Animation
Today’s Topics
• Questions from previous lectures or assignments?
• Views
• Drawing
• Animation
Views
View Fundamentals
• Rectangular area on screen
• Draws content
• Handles events
• Subclass of UIResponder (which defines event handling API)
• Views arranged in a hierarchical fashion
    every view has one superview
  ■

  ■ every view has zero or more subviews




• Questions that immediately arise:
    what view-related structures exist?
  ■

  ■ what is the coordinate system?
View-related Structures
• CGPoint
      location in space: x and y components
  ■


• CGSize
      dimensions of something: width and height components
  ■


• CGRect
      location and dimension: origin and size
  ■
Rects, Points and Sizes
                                                     y
          CGRect

                                    CGPoint
  origin                                                     80
                                          80
                                x                                  54
   size
                                          54
                            y
                                                    (0, 0)              x




                                                             144
                       CGSize

                            144
                   width
                                               72
                            72
                   height
View-related Structure

Creation Function           Example

                            CGPoint point = CGPointMake (100.0, 200.0);
CGPointMake (x, y)          point.x = 300.0;
                            point.y = 30.0;

                           CGSize size = CGSizeMake (42.0, 11.0);
CGSizeMake (width, height) size.width = 100.0;
                           size.height = 72.0;

                           CGRect rect = CGRectMake (100.0, 200.0,
CGRectMake (x, y,                                    42.0, 11.0);
            width, height) rect.origin.x = 0.0;
                           rect.size.width = 50.0;
UIView Coordinate System
  Origin in upper left corner
■

■ y axis grows downwards



                                0, 0
                                       +x




                                 +y
UIView Coordinate System
  Origin in upper left corner
■

■ y axis grows downwards



                                0, 0
                                                +x



                                       UIView


                                 +y
Location and Size
• View’s location and size expressed in two ways
    Frame is in terms of superview’s coordinate system
  ■

  ■ Bounds is in terms of local coordinate system
Location and Size
• View’s location and size expressed in two ways
    Frame is in terms of superview’s coordinate system
  ■

  ■ Bounds is in terms of local coordinate system




                                      View A
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                       550
                                           View A




400
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                       550
                                                    View A frame:
                                                       origin: 0, 0
                                           View A
                                                       size: 550 x 400

                                                    View A bounds:
                                                       origin: 0, 0
                                                       size: 550 x 400

400
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                       550
                                                    View A frame:
                                                       origin: 0, 0
                                           View A
                                                       size: 550 x 400

                                                    View A bounds:
                                 View B                origin: 0, 0
                                                       size: 550 x 400

400
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                       550
                                                    View A frame:
                                                       origin: 0, 0
                                           View A
                                                       size: 550 x 400
           200, 100
                                                    View A bounds:
                                 View B                origin: 0, 0
                                                       size: 550 x 400

400
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                        550
                                                    View A frame:
                                                       origin: 0, 0
                                           View A
                                                       size: 550 x 400
           200, 100          200
                                                    View A bounds:
                                  View B               origin: 0, 0
                                                       size: 550 x 400

400                   250
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                        550
                                                    View A frame:
                                                       origin: 0, 0
                                           View A
                                                       size: 550 x 400
           200, 100          200
                                                    View A bounds:
                                  View B               origin: 0, 0
                                                       size: 550 x 400

400                   250
                                                    View B frame:
                                                       origin: 200, 100
                                                       size: 200 x 250
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                               550
                                                           View A frame:
                                                              origin: 0, 0
                                                  View A
                                                              size: 550 x 400
           200, 100                 200
                                                           View A bounds:
                            0, 0         View B               origin: 0, 0
                                                              size: 550 x 400

400                   250
                                                           View B frame:
                                                              origin: 200, 100
                                                              size: 200 x 250
Location and Size
• View’s location and size expressed in two ways
         Frame is in terms of superview’s coordinate system
       ■

       ■ Bounds is in terms of local coordinate system

0, 0                               550
                                                           View A frame:
                                                              origin: 0, 0
                                                  View A
                                                              size: 550 x 400
           200, 100                 200
                                                           View A bounds:
                            0, 0         View B               origin: 0, 0
                                                              size: 550 x 400

400                   250
                                                           View B frame:
                                                              origin: 200, 100
                                                              size: 200 x 250

                                                           View B bounds:
                                                              origin: 0, 0
                                                              size: 200 x 250
Frame and Bounds
• Which to use?
      Usually depends on the context
  ■


• If you are using a view, typically you use frame
• If you are implementing a view, typically you use bounds
• Matter of perspective
    From outside it’s usually the frame
  ■

  ■ From inside it’s usually the bounds




• Examples:
    Creating a view, positioning a view in superview - use frame
  ■

  ■ Handling events, drawing a view - use bounds
View Hierarchy - UIWindow
• Views live inside of a window
• Instance of UIWindow, container of all views for an iPhone app
    apps have single window
  ■

  ■ usually set up in template project


• UIWindow is actually just a view
      adds some additional functionality specific to top level view
  ■
View Hierarchy - Manipulation
• Add/remove views in IB or using UIView methods
 	 - (void)addSubview:(UIView *)view;
 	 - (void)removeFromSuperview;
• Manipulate the view hierarchy manually:
 	-   (void)insertSubview:(UIView *)view atIndex:(int)index;
 	-   (void)insertSubview:(UIView *)view belowSubview:(UIView *)view;
 	-   (void)insertSubview:(UIView *)view aboveSubview:(UIView *)view;
 	-   (void)exchangeSubviewAtIndex:(int)index
            withSubviewAtIndex:(int)otherIndex;
View Hierarchy - Ownership
• Superviews retain their subviews
• Not uncommon for views to only be retained by superview
    Be careful when removing!
  ■

  ■ Retain subview before removing if you want to reuse it


• Views can be temporarily hidden
      [theView setHidden:YES];
Creating Views
Where do views come from?
• Commonly Interface Builder
• Drag out any of the existing view objects (buttons, labels, etc)
• Or drag generic UIView and set custom class
Manual Creation
• Views are initialized using -initWithFrame:
 	 	 CGRect frame = CGRectMake(0, 0, 200, 150);
 	 	 UIView *myView = [[UIView alloc] initWithFrame:frame];

• Example:
 	 	 CGRect frame = CGRectMake(20, 45, 140, 21);
 	 	 UILabel *label = [[UILabel alloc] initWithFrame:frame];

 	 	 [window addSubview:label];
 	 	 [label setText:@”Number of sides:”];
 	 	 [label release]; // label now retained by window
Custom Views
• Subclass UIView
• For custom drawing, you override:
 	 	 	 	 - (void)drawRect:(CGRect)rect;
• For event handling, you override:
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
Drawing Views
- (void)drawRect:(CGRect)rect
• UIView’s drawRect: implementation does nothing
      If no overridden drawRect: then backgroundColor used to fill
  ■


• Override - drawRect: to draw a custom view
      rect argument is area to draw
  ■


• When is it OK to call drawRect:?
Be Lazy
• drawRect: is invoked automatically
      Don’t call it directly!
  ■


• When a view needs to be redrawn, use:
 	 	 - (void)setNeedsDisplay;


• For example, in your controller:
 	 	 - (void)setNumberOfSides:(int)sides {
 	 	 	 	 	 	 numberOfSides = sides;
 	 	 	 	 	 	 [polygonView setNeedsDisplay];
 		}
CoreGraphics and Quartz 2D
• UIKit offers very basic drawing functionality
         UIRectFill(CGRect rect);
 	 	 	 	 UIRectFrame(CGRect rect);
• Many types and drawing functions defined in CoreGraphics
• CG is a C-based API, not Objective-C
• CG and Quartz 2D drawing engine define simple but powerful
 graphics primitives
    Graphics context
  ■

  ■ Transformations

  ■ Paths

  ■ Colors

  ■ Fonts

  ■ Painting operations
Graphics Contexts
• All drawing is done into an opaque graphics context
• Actual output destination could be a screen, bitmap buffer,
  printer, PDF document, etc.
• Graphics context setup automatically before invoking drawRect:
    Defines current path, line width, transform, etc.
  ■

  ■ Access the graphics context within drawRect: by calling

      	 	 (CGContextRef)UIGraphicsGetCurrentContext(void);
      Use CG calls to change settings
  ■


• Context only valid for current call to drawRect:
      Don’t try to cache them!
  ■
CG Wrappers
• Some CG functionality wrapped by UIKit
• UIColor
    Convenience for getting common colors
  ■

  ■ Easily set the fill and/or stroke colors when drawing


            UIColor *redColor = [UIColor redColor];
      	 	 	 [redColor set];
      	 	 	 // drawing will be done in red
• UIFont
    Access system font
  ■

  ■ Get font by name


      	 	 	 UIFont *font = [UIFont systemFontOfSize:14.0];
      	 	 	 [myLabel setFont:font];
Simple drawRect: example
• Draw a solid color and shape
- (void)drawRect:(CGRect)rect {
   CGRect bounds = [self bounds];

    [[UIColor grayColor] set];
    UIRectFill (bounds);

    CGRect square = CGRectMake (10, 10, 50, 100);
    [[UIColor redColor] set];
    UIRectFill (square);

    [[UIColor blackColor] set];
    UIRectFrame (square);
}
Simple drawRect: example
• Draw a solid color and shape
- (void)drawRect:(CGRect)rect {
   CGRect bounds = [self bounds];

    [[UIColor grayColor] set];
    UIRectFill (bounds);

    CGRect square = CGRectMake (10, 10, 50, 100);
    [[UIColor redColor] set];
    UIRectFill (square);

    [[UIColor blackColor] set];
    UIRectFrame (square);
}
Drawing More Complex Shapes
• Common steps for drawRect: are
    Get current graphics context
  ■

  ■ Define a path

  ■ Set a color

  ■ Stroke or fill path

  ■ Repeat, if necessary
Paths
• CoreGraphics paths define shapes
• Made up of lines, arcs, curves and rectangles
• Creation and drawing of paths are two distinct operations
      Define path first, then draw it
  ■
CGPath
• Two parallel sets of functions for using paths
    CGContext “convenience” throwaway functions
  ■

  ■ CGPath functions for creating reusable paths




           CGContext                       CGPath
 CGContextMoveToPoint           CGPathMoveToPoint
 CGContextLineToPoint           CGPathAddLineToPoint
 CGContextAddArcToPoint         CGPathAddArcToPoint
 CGContextClosePath             CGPathCloseSubPath
  And so on and so on . . .
Simple Path Example
- (void)drawRect:(CGRect)rect {
   CGContextRef context = UIGraphicsGetCurrentContext();

    [[UIColor grayColor] set];
    UIRectFill ([self bounds]);

    CGContextBeginPath (context);
    CGContextMoveToPoint (context, 75, 10);
    CGContextAddLineToPoint (context, 10, 150);
    CGContextAddLineToPoint (context, 160, 150);
    CGContextClosePath (context);

    [[UIColor redColor] setFill];
    [[UIColor blackColor] setStroke];
    CGContextDrawPath (context, kCGPathFillStroke);
}
Simple Path Example
- (void)drawRect:(CGRect)rect {
   CGContextRef context = UIGraphicsGetCurrentContext();

    [[UIColor grayColor] set];
    UIRectFill ([self bounds]);

    CGContextBeginPath (context);
    CGContextMoveToPoint (context, 75, 10);
    CGContextAddLineToPoint (context, 10, 150);
    CGContextAddLineToPoint (context, 160, 150);
    CGContextClosePath (context);

    [[UIColor redColor] setFill];
    [[UIColor blackColor] setStroke];
    CGContextDrawPath (context, kCGPathFillStroke);
}
More Drawing Information
• UIView Class Reference
• CGContext Reference
• “Quartz 2D Programming Guide”
• Lots of samples in the iPhone Dev Center
View Properties & Animation
View Properties
• Views have many properties
      bounds, alpha, transform, backgroundColor, hidden, etc
  ■


• View subclasses add many more
    UIControl: enabled, selected, highlighted
  ■

  ■ UILabel: font, textColor, shadowColor, textAlignment, etc

  ■ UIButton: font, title, titleColor, image, backgroundImage


• Most properties settable in IB
      If not in Attributes Inspector, need to set in code
  ■


• See class reference documentation for all properties
Animating Views
• Consider example where a view needs to resize or change
  layout dynamically
• For example, user toggles a switch which displays additional
  views
Animating Views
• Consider example where a view needs to resize or change
  layout dynamically
• For example, user toggles a switch which displays additional
  views
Animating Views
• Consider example where a view needs to resize or change
  layout dynamically
• For example, user toggles a switch which displays additional
  views
UIView Animations
• UIView supports a number of animatable properties
      frame, bounds, center, alpha, transform
  ■


• Create “blocks” around changes to animatable properties
• Animations run asynchronously and automatically
Other Animation Options
• Additional methods for other options
    delay before starting animation
  ■

  ■ start animation at specific time

  ■ set animation curve (ease in/out, ease in, ease out, linear)

  ■ repeat count

  ■ autoreverses (e.g. ping pong back and forth)
Animation Examples
View Animation Example
- (void)showAdvancedOptions {
    // assume polygonView and optionsView
    [UIView beginAnimations:@”advancedAnimations” context:nil];
    [UIView setAnimationDuration:0.3];


    // make optionsView visible (alpha is currently 0.0)
    optionsView.alpha = 1.0;

    // move the polygonView down
    CGRect polygonFrame = polygonView.frame;
    polygonFrame.origin.y += 200;
    polygonView.frame = polygonFrame;


    [UIView commitAnimations];

}
Knowing When Animations Finish
• UIView animations allow for a delegate
 	 	 	 [UIView setAnimationDelegate:myController];


• myController will have callbacks invoked before and after
     - (void)animationWillStart:(NSString *)animationID
             context:(void *)context;

     - (void)animationDidStop:(NSString *)animationID
             finished:(NSNumber *)finished
             context:(void *)context;

• Can provide custom selectors if desired, for example
     [UIView setAnimationWillStartSelector:
                    @selector(animationWillStart)];
     [UIView setAnimationDidStopSelector:
                    @selector(animationDidStop)];
How Does It Work?
• Is drawRect: invoked repeatedly?
• Do I have to run some kind of timer in order to drive the
  animation?
• Is it magic?
Core Animation
• Hardware accelerated rendering engine
• UIViews are backed by Core Animation “layers”
• First time drawRect: is called on UIView results are cached
    If view’s contents don’t change drawRect: never called again
  ■

  ■ Cached results used to render view

  ■ Layers maintained in separate hierarchy managed by separate

    process
• Rendering of layers uses cached results
• Property animations done automatically by manipulating layers
View Transforms
• Every view has a transform property
      used to apply scaling, rotation and translation to a view
  ■


• By default a view’s transform is the identity transform
      no affect on the view
  ■


• CGAffineTransform structure used to represent transform
• Use CG functions to create, modify transforms
      CGAffineTransform Functions (just a small example set)
  CGAffineTransformScale (transform, xScale, yScale)
  CGAffineTransformRotate (transform, angle)

  CGAffineTransformTranslate (transform, xDelta, yDelta)
More Animation Information
• iPhone OS Programming Guide
      “Modifying Views at Runtime” section
  ■


• Core Animation Programming Guide
View Example Project
Questions?

More Related Content

What's hot

Quadric surfaces
Quadric surfacesQuadric surfaces
Quadric surfacesAnkur Kumar
 
Polygon Fill
Polygon FillPolygon Fill
Polygon Fillwahab13
 
Projection In Computer Graphics
Projection In Computer GraphicsProjection In Computer Graphics
Projection In Computer GraphicsSanu Philip
 
Composite transformations
Composite transformationsComposite transformations
Composite transformationsMohd Arif
 
video compression techique
video compression techiquevideo compression techique
video compression techiqueAshish Kumar
 
Interlaced and progressive Camera
Interlaced and progressive CameraInterlaced and progressive Camera
Interlaced and progressive CameraVanya Valindria
 
Bezier and Spline Curves and Surfaces
Bezier and Spline Curves and SurfacesBezier and Spline Curves and Surfaces
Bezier and Spline Curves and SurfacesSyed Zaid Irshad
 
Circle drawing algo.
Circle drawing algo.Circle drawing algo.
Circle drawing algo.Mohd Arif
 
Guía de informática multimedia
Guía de informática multimediaGuía de informática multimedia
Guía de informática multimediaPlutoon
 
Raster scan systems with video controller and display processor
Raster scan systems with video controller and display processorRaster scan systems with video controller and display processor
Raster scan systems with video controller and display processorhemanth kumar
 
graphics hardware input devices
graphics hardware input devicesgraphics hardware input devices
graphics hardware input devicesTabeer12
 
Transformations computer graphics
Transformations computer graphics Transformations computer graphics
Transformations computer graphics Vikram Halder
 
Bresenham's line drawing algorithm
Bresenham's line drawing algorithmBresenham's line drawing algorithm
Bresenham's line drawing algorithmnehrurevathy
 

What's hot (20)

Quadric surfaces
Quadric surfacesQuadric surfaces
Quadric surfaces
 
Image formation
Image formation Image formation
Image formation
 
visible surface detection
visible surface detectionvisible surface detection
visible surface detection
 
Polygon Fill
Polygon FillPolygon Fill
Polygon Fill
 
Projection In Computer Graphics
Projection In Computer GraphicsProjection In Computer Graphics
Projection In Computer Graphics
 
Composite transformations
Composite transformationsComposite transformations
Composite transformations
 
video compression techique
video compression techiquevideo compression techique
video compression techique
 
Dda algorithm
Dda algorithmDda algorithm
Dda algorithm
 
Interlaced and progressive Camera
Interlaced and progressive CameraInterlaced and progressive Camera
Interlaced and progressive Camera
 
Bezier and Spline Curves and Surfaces
Bezier and Spline Curves and SurfacesBezier and Spline Curves and Surfaces
Bezier and Spline Curves and Surfaces
 
Oblique parallel projection
Oblique parallel projectionOblique parallel projection
Oblique parallel projection
 
Circle drawing algo.
Circle drawing algo.Circle drawing algo.
Circle drawing algo.
 
Guía de informática multimedia
Guía de informática multimediaGuía de informática multimedia
Guía de informática multimedia
 
Clipping
ClippingClipping
Clipping
 
Raster scan systems with video controller and display processor
Raster scan systems with video controller and display processorRaster scan systems with video controller and display processor
Raster scan systems with video controller and display processor
 
graphics hardware input devices
graphics hardware input devicesgraphics hardware input devices
graphics hardware input devices
 
Transformations computer graphics
Transformations computer graphics Transformations computer graphics
Transformations computer graphics
 
of Pixels and Bits
of Pixels and Bitsof Pixels and Bits
of Pixels and Bits
 
Bresenham's line drawing algorithm
Bresenham's line drawing algorithmBresenham's line drawing algorithm
Bresenham's line drawing algorithm
 
3 d display methods
3 d display methods3 d display methods
3 d display methods
 

Viewers also liked

Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
06 View Controllers
06 View Controllers06 View Controllers
06 View ControllersMahmoud
 
02 Objective C
02 Objective C02 Objective C
02 Objective CMahmoud
 
03 Custom Classes
03 Custom Classes03 Custom Classes
03 Custom ClassesMahmoud
 
01 Introduction
01 Introduction01 Introduction
01 IntroductionMahmoud
 
04 Model View Controller
04 Model View Controller04 Model View Controller
04 Model View ControllerMahmoud
 
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Yandex
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Глеб Тарасов
 
Архитектура компилятора Swift
Архитектура компилятора SwiftАрхитектура компилятора Swift
Архитектура компилятора SwiftAndrey Volobuev
 
Преимущества и недостатки языка Swift
Преимущества и недостатки языка SwiftПреимущества и недостатки языка Swift
Преимущества и недостатки языка SwiftAndrey Volobuev
 
Objective C Tricks
Objective C TricksObjective C Tricks
Objective C TricksInova LLC
 
Rambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуйRambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуйRAMBLER&Co
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, SwiftYandex
 
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущееBadoo Development
 
Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Badoo Development
 

Viewers also liked (20)

05 Views
05 Views05 Views
05 Views
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Animation in iOS
Animation in iOSAnimation in iOS
Animation in iOS
 
005
005005
005
 
06 View Controllers
06 View Controllers06 View Controllers
06 View Controllers
 
09 Data
09 Data09 Data
09 Data
 
02 Objective C
02 Objective C02 Objective C
02 Objective C
 
iOS: View Controllers
iOS: View ControllersiOS: View Controllers
iOS: View Controllers
 
03 Custom Classes
03 Custom Classes03 Custom Classes
03 Custom Classes
 
01 Introduction
01 Introduction01 Introduction
01 Introduction
 
04 Model View Controller
04 Model View Controller04 Model View Controller
04 Model View Controller
 
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
 
Архитектура компилятора Swift
Архитектура компилятора SwiftАрхитектура компилятора Swift
Архитектура компилятора Swift
 
Преимущества и недостатки языка Swift
Преимущества и недостатки языка SwiftПреимущества и недостатки языка Swift
Преимущества и недостатки языка Swift
 
Objective C Tricks
Objective C TricksObjective C Tricks
Objective C Tricks
 
Rambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуйRambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуй
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
 
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущее
 
Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?
 

Recently uploaded

Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDThiyagu K
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphThiyagu K
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...PsychoTech Services
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3JemimahLaneBuaron
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingTeacherCyreneCayanan
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfAyushMahapatra5
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfagholdier
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 

Recently uploaded (20)

Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 

CS193P Lecture 5 View Animation

  • 1. CS193P - Lecture 5 iPhone Application Development Views Drawing Animation
  • 2. Today’s Topics • Questions from previous lectures or assignments? • Views • Drawing • Animation
  • 4. View Fundamentals • Rectangular area on screen • Draws content • Handles events • Subclass of UIResponder (which defines event handling API) • Views arranged in a hierarchical fashion every view has one superview ■ ■ every view has zero or more subviews • Questions that immediately arise: what view-related structures exist? ■ ■ what is the coordinate system?
  • 5. View-related Structures • CGPoint location in space: x and y components ■ • CGSize dimensions of something: width and height components ■ • CGRect location and dimension: origin and size ■
  • 6. Rects, Points and Sizes y CGRect CGPoint origin 80 80 x 54 size 54 y (0, 0) x 144 CGSize 144 width 72 72 height
  • 7. View-related Structure Creation Function Example CGPoint point = CGPointMake (100.0, 200.0); CGPointMake (x, y) point.x = 300.0; point.y = 30.0; CGSize size = CGSizeMake (42.0, 11.0); CGSizeMake (width, height) size.width = 100.0; size.height = 72.0; CGRect rect = CGRectMake (100.0, 200.0, CGRectMake (x, y, 42.0, 11.0); width, height) rect.origin.x = 0.0; rect.size.width = 50.0;
  • 8. UIView Coordinate System Origin in upper left corner ■ ■ y axis grows downwards 0, 0 +x +y
  • 9. UIView Coordinate System Origin in upper left corner ■ ■ y axis grows downwards 0, 0 +x UIView +y
  • 10. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system
  • 11. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system View A
  • 12. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A 400
  • 13. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 View A bounds: origin: 0, 0 size: 550 x 400 400
  • 14. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 View A bounds: View B origin: 0, 0 size: 550 x 400 400
  • 15. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 200, 100 View A bounds: View B origin: 0, 0 size: 550 x 400 400
  • 16. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 200, 100 200 View A bounds: View B origin: 0, 0 size: 550 x 400 400 250
  • 17. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 200, 100 200 View A bounds: View B origin: 0, 0 size: 550 x 400 400 250 View B frame: origin: 200, 100 size: 200 x 250
  • 18. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 200, 100 200 View A bounds: 0, 0 View B origin: 0, 0 size: 550 x 400 400 250 View B frame: origin: 200, 100 size: 200 x 250
  • 19. Location and Size • View’s location and size expressed in two ways Frame is in terms of superview’s coordinate system ■ ■ Bounds is in terms of local coordinate system 0, 0 550 View A frame: origin: 0, 0 View A size: 550 x 400 200, 100 200 View A bounds: 0, 0 View B origin: 0, 0 size: 550 x 400 400 250 View B frame: origin: 200, 100 size: 200 x 250 View B bounds: origin: 0, 0 size: 200 x 250
  • 20. Frame and Bounds • Which to use? Usually depends on the context ■ • If you are using a view, typically you use frame • If you are implementing a view, typically you use bounds • Matter of perspective From outside it’s usually the frame ■ ■ From inside it’s usually the bounds • Examples: Creating a view, positioning a view in superview - use frame ■ ■ Handling events, drawing a view - use bounds
  • 21. View Hierarchy - UIWindow • Views live inside of a window • Instance of UIWindow, container of all views for an iPhone app apps have single window ■ ■ usually set up in template project • UIWindow is actually just a view adds some additional functionality specific to top level view ■
  • 22. View Hierarchy - Manipulation • Add/remove views in IB or using UIView methods - (void)addSubview:(UIView *)view; - (void)removeFromSuperview; • Manipulate the view hierarchy manually: - (void)insertSubview:(UIView *)view atIndex:(int)index; - (void)insertSubview:(UIView *)view belowSubview:(UIView *)view; - (void)insertSubview:(UIView *)view aboveSubview:(UIView *)view; - (void)exchangeSubviewAtIndex:(int)index withSubviewAtIndex:(int)otherIndex;
  • 23. View Hierarchy - Ownership • Superviews retain their subviews • Not uncommon for views to only be retained by superview Be careful when removing! ■ ■ Retain subview before removing if you want to reuse it • Views can be temporarily hidden [theView setHidden:YES];
  • 25. Where do views come from? • Commonly Interface Builder • Drag out any of the existing view objects (buttons, labels, etc) • Or drag generic UIView and set custom class
  • 26. Manual Creation • Views are initialized using -initWithFrame: CGRect frame = CGRectMake(0, 0, 200, 150); UIView *myView = [[UIView alloc] initWithFrame:frame]; • Example: CGRect frame = CGRectMake(20, 45, 140, 21); UILabel *label = [[UILabel alloc] initWithFrame:frame]; [window addSubview:label]; [label setText:@”Number of sides:”]; [label release]; // label now retained by window
  • 27. Custom Views • Subclass UIView • For custom drawing, you override: - (void)drawRect:(CGRect)rect; • For event handling, you override: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
  • 29. - (void)drawRect:(CGRect)rect • UIView’s drawRect: implementation does nothing If no overridden drawRect: then backgroundColor used to fill ■ • Override - drawRect: to draw a custom view rect argument is area to draw ■ • When is it OK to call drawRect:?
  • 30. Be Lazy • drawRect: is invoked automatically Don’t call it directly! ■ • When a view needs to be redrawn, use: - (void)setNeedsDisplay; • For example, in your controller: - (void)setNumberOfSides:(int)sides { numberOfSides = sides; [polygonView setNeedsDisplay]; }
  • 31. CoreGraphics and Quartz 2D • UIKit offers very basic drawing functionality UIRectFill(CGRect rect); UIRectFrame(CGRect rect); • Many types and drawing functions defined in CoreGraphics • CG is a C-based API, not Objective-C • CG and Quartz 2D drawing engine define simple but powerful graphics primitives Graphics context ■ ■ Transformations ■ Paths ■ Colors ■ Fonts ■ Painting operations
  • 32. Graphics Contexts • All drawing is done into an opaque graphics context • Actual output destination could be a screen, bitmap buffer, printer, PDF document, etc. • Graphics context setup automatically before invoking drawRect: Defines current path, line width, transform, etc. ■ ■ Access the graphics context within drawRect: by calling (CGContextRef)UIGraphicsGetCurrentContext(void); Use CG calls to change settings ■ • Context only valid for current call to drawRect: Don’t try to cache them! ■
  • 33. CG Wrappers • Some CG functionality wrapped by UIKit • UIColor Convenience for getting common colors ■ ■ Easily set the fill and/or stroke colors when drawing UIColor *redColor = [UIColor redColor]; [redColor set]; // drawing will be done in red • UIFont Access system font ■ ■ Get font by name UIFont *font = [UIFont systemFontOfSize:14.0]; [myLabel setFont:font];
  • 34. Simple drawRect: example • Draw a solid color and shape - (void)drawRect:(CGRect)rect { CGRect bounds = [self bounds]; [[UIColor grayColor] set]; UIRectFill (bounds); CGRect square = CGRectMake (10, 10, 50, 100); [[UIColor redColor] set]; UIRectFill (square); [[UIColor blackColor] set]; UIRectFrame (square); }
  • 35. Simple drawRect: example • Draw a solid color and shape - (void)drawRect:(CGRect)rect { CGRect bounds = [self bounds]; [[UIColor grayColor] set]; UIRectFill (bounds); CGRect square = CGRectMake (10, 10, 50, 100); [[UIColor redColor] set]; UIRectFill (square); [[UIColor blackColor] set]; UIRectFrame (square); }
  • 36. Drawing More Complex Shapes • Common steps for drawRect: are Get current graphics context ■ ■ Define a path ■ Set a color ■ Stroke or fill path ■ Repeat, if necessary
  • 37. Paths • CoreGraphics paths define shapes • Made up of lines, arcs, curves and rectangles • Creation and drawing of paths are two distinct operations Define path first, then draw it ■
  • 38. CGPath • Two parallel sets of functions for using paths CGContext “convenience” throwaway functions ■ ■ CGPath functions for creating reusable paths CGContext CGPath CGContextMoveToPoint CGPathMoveToPoint CGContextLineToPoint CGPathAddLineToPoint CGContextAddArcToPoint CGPathAddArcToPoint CGContextClosePath CGPathCloseSubPath And so on and so on . . .
  • 39. Simple Path Example - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); [[UIColor grayColor] set]; UIRectFill ([self bounds]); CGContextBeginPath (context); CGContextMoveToPoint (context, 75, 10); CGContextAddLineToPoint (context, 10, 150); CGContextAddLineToPoint (context, 160, 150); CGContextClosePath (context); [[UIColor redColor] setFill]; [[UIColor blackColor] setStroke]; CGContextDrawPath (context, kCGPathFillStroke); }
  • 40. Simple Path Example - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); [[UIColor grayColor] set]; UIRectFill ([self bounds]); CGContextBeginPath (context); CGContextMoveToPoint (context, 75, 10); CGContextAddLineToPoint (context, 10, 150); CGContextAddLineToPoint (context, 160, 150); CGContextClosePath (context); [[UIColor redColor] setFill]; [[UIColor blackColor] setStroke]; CGContextDrawPath (context, kCGPathFillStroke); }
  • 41. More Drawing Information • UIView Class Reference • CGContext Reference • “Quartz 2D Programming Guide” • Lots of samples in the iPhone Dev Center
  • 42. View Properties & Animation
  • 43. View Properties • Views have many properties bounds, alpha, transform, backgroundColor, hidden, etc ■ • View subclasses add many more UIControl: enabled, selected, highlighted ■ ■ UILabel: font, textColor, shadowColor, textAlignment, etc ■ UIButton: font, title, titleColor, image, backgroundImage • Most properties settable in IB If not in Attributes Inspector, need to set in code ■ • See class reference documentation for all properties
  • 44. Animating Views • Consider example where a view needs to resize or change layout dynamically • For example, user toggles a switch which displays additional views
  • 45. Animating Views • Consider example where a view needs to resize or change layout dynamically • For example, user toggles a switch which displays additional views
  • 46. Animating Views • Consider example where a view needs to resize or change layout dynamically • For example, user toggles a switch which displays additional views
  • 47. UIView Animations • UIView supports a number of animatable properties frame, bounds, center, alpha, transform ■ • Create “blocks” around changes to animatable properties • Animations run asynchronously and automatically
  • 48. Other Animation Options • Additional methods for other options delay before starting animation ■ ■ start animation at specific time ■ set animation curve (ease in/out, ease in, ease out, linear) ■ repeat count ■ autoreverses (e.g. ping pong back and forth)
  • 50. View Animation Example - (void)showAdvancedOptions { // assume polygonView and optionsView [UIView beginAnimations:@”advancedAnimations” context:nil]; [UIView setAnimationDuration:0.3]; // make optionsView visible (alpha is currently 0.0) optionsView.alpha = 1.0; // move the polygonView down CGRect polygonFrame = polygonView.frame; polygonFrame.origin.y += 200; polygonView.frame = polygonFrame; [UIView commitAnimations]; }
  • 51. Knowing When Animations Finish • UIView animations allow for a delegate [UIView setAnimationDelegate:myController]; • myController will have callbacks invoked before and after - (void)animationWillStart:(NSString *)animationID context:(void *)context; - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context; • Can provide custom selectors if desired, for example [UIView setAnimationWillStartSelector: @selector(animationWillStart)]; [UIView setAnimationDidStopSelector: @selector(animationDidStop)];
  • 52. How Does It Work? • Is drawRect: invoked repeatedly? • Do I have to run some kind of timer in order to drive the animation? • Is it magic?
  • 53. Core Animation • Hardware accelerated rendering engine • UIViews are backed by Core Animation “layers” • First time drawRect: is called on UIView results are cached If view’s contents don’t change drawRect: never called again ■ ■ Cached results used to render view ■ Layers maintained in separate hierarchy managed by separate process • Rendering of layers uses cached results • Property animations done automatically by manipulating layers
  • 54. View Transforms • Every view has a transform property used to apply scaling, rotation and translation to a view ■ • By default a view’s transform is the identity transform no affect on the view ■ • CGAffineTransform structure used to represent transform • Use CG functions to create, modify transforms CGAffineTransform Functions (just a small example set) CGAffineTransformScale (transform, xScale, yScale) CGAffineTransformRotate (transform, angle) CGAffineTransformTranslate (transform, xDelta, yDelta)
  • 55. More Animation Information • iPhone OS Programming Guide “Modifying Views at Runtime” section ■ • Core Animation Programming Guide