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

PR-270: PP-YOLO: An Effective and Efficient Implementation of Object Detector
PR-270: PP-YOLO: An Effective and Efficient Implementation of Object DetectorPR-270: PP-YOLO: An Effective and Efficient Implementation of Object Detector
PR-270: PP-YOLO: An Effective and Efficient Implementation of Object DetectorJinwon Lee
 
Dimensionamento de ligações em estruturas metálicas
Dimensionamento de ligações em estruturas metálicasDimensionamento de ligações em estruturas metálicas
Dimensionamento de ligações em estruturas metálicasTimóteo Rocha
 
ゼロから始めるレコメンダシステム
ゼロから始めるレコメンダシステムゼロから始めるレコメンダシステム
ゼロから始めるレコメンダシステムKazuaki Tanida
 
画像解析の基礎知識
画像解析の基礎知識画像解析の基礎知識
画像解析の基礎知識LPIXEL
 
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...Kazuyuki Miyazawa
 
Concepção estrutural
Concepção estruturalConcepção estrutural
Concepção estruturalroberto_ruani
 
Breadth first algorithm for solving Image based maze problem
Breadth first algorithm for solving Image based maze problemBreadth first algorithm for solving Image based maze problem
Breadth first algorithm for solving Image based maze problemNavin Kumar
 
Occlusion and Abandoned Object Detection for Surveillance Applications
Occlusion and Abandoned Object Detection for Surveillance ApplicationsOcclusion and Abandoned Object Detection for Surveillance Applications
Occlusion and Abandoned Object Detection for Surveillance ApplicationsEditor IJCATR
 
Lajes, representação gráfica de elementos estruturais
Lajes, representação gráfica de elementos estruturaisLajes, representação gráfica de elementos estruturais
Lajes, representação gráfica de elementos estruturaisguidify
 
ImageJチュートリアル
ImageJチュートリアルImageJチュートリアル
ImageJチュートリアルLPIXEL
 
Anatomy of YOLO - v1
Anatomy of YOLO - v1Anatomy of YOLO - v1
Anatomy of YOLO - v1Jihoon Song
 
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15Shuyo Nakatani
 
PR-207: YOLOv3: An Incremental Improvement
PR-207: YOLOv3: An Incremental ImprovementPR-207: YOLOv3: An Incremental Improvement
PR-207: YOLOv3: An Incremental ImprovementJinwon Lee
 
Pilares - REPRESENTAÇÃO GRAFICA
Pilares - REPRESENTAÇÃO GRAFICAPilares - REPRESENTAÇÃO GRAFICA
Pilares - REPRESENTAÇÃO GRAFICAguidify
 
2013 tecnologia construção
2013 tecnologia construção2013 tecnologia construção
2013 tecnologia construçãoLinduart Tavares
 

What's hot (20)

PR-270: PP-YOLO: An Effective and Efficient Implementation of Object Detector
PR-270: PP-YOLO: An Effective and Efficient Implementation of Object DetectorPR-270: PP-YOLO: An Effective and Efficient Implementation of Object Detector
PR-270: PP-YOLO: An Effective and Efficient Implementation of Object Detector
 
画像処理(二値化)
画像処理(二値化)画像処理(二値化)
画像処理(二値化)
 
Dimensionamento de ligações em estruturas metálicas
Dimensionamento de ligações em estruturas metálicasDimensionamento de ligações em estruturas metálicas
Dimensionamento de ligações em estruturas metálicas
 
ゼロから始めるレコメンダシステム
ゼロから始めるレコメンダシステムゼロから始めるレコメンダシステム
ゼロから始めるレコメンダシステム
 
画像解析の基礎知識
画像解析の基礎知識画像解析の基礎知識
画像解析の基礎知識
 
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
 
Concepção estrutural
Concepção estruturalConcepção estrutural
Concepção estrutural
 
Breadth first algorithm for solving Image based maze problem
Breadth first algorithm for solving Image based maze problemBreadth first algorithm for solving Image based maze problem
Breadth first algorithm for solving Image based maze problem
 
Occlusion and Abandoned Object Detection for Surveillance Applications
Occlusion and Abandoned Object Detection for Surveillance ApplicationsOcclusion and Abandoned Object Detection for Surveillance Applications
Occlusion and Abandoned Object Detection for Surveillance Applications
 
Lajes, representação gráfica de elementos estruturais
Lajes, representação gráfica de elementos estruturaisLajes, representação gráfica de elementos estruturais
Lajes, representação gráfica de elementos estruturais
 
ImageJチュートリアル
ImageJチュートリアルImageJチュートリアル
ImageJチュートリアル
 
Yolov3
Yolov3Yolov3
Yolov3
 
Yolo v1
Yolo v1Yolo v1
Yolo v1
 
DA - Unidade 9- COBERTURA.pptx
DA - Unidade 9- COBERTURA.pptxDA - Unidade 9- COBERTURA.pptx
DA - Unidade 9- COBERTURA.pptx
 
Anatomy of YOLO - v1
Anatomy of YOLO - v1Anatomy of YOLO - v1
Anatomy of YOLO - v1
 
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
 
PR-207: YOLOv3: An Incremental Improvement
PR-207: YOLOv3: An Incremental ImprovementPR-207: YOLOv3: An Incremental Improvement
PR-207: YOLOv3: An Incremental Improvement
 
Pilares - REPRESENTAÇÃO GRAFICA
Pilares - REPRESENTAÇÃO GRAFICAPilares - REPRESENTAÇÃO GRAFICA
Pilares - REPRESENTAÇÃO GRAFICA
 
Coco dataset
Coco datasetCoco dataset
Coco dataset
 
2013 tecnologia construção
2013 tecnologia construção2013 tecnologia construção
2013 tecnologia construção
 

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
 
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонBadoo Development
 

Viewers also liked (20)

Интуит. Разработка приложений для 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 коммуникации: что важнее?
 
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
 

Recently uploaded

Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptxSherlyMaeNeri
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4MiaBumagat1
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Jisc
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfphamnguyenenglishnb
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSJoshuaGantuangco2
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Barangay Council for the Protection of Children (BCPC) Orientation.pptx
Barangay Council for the Protection of Children (BCPC) Orientation.pptxBarangay Council for the Protection of Children (BCPC) Orientation.pptx
Barangay Council for the Protection of Children (BCPC) Orientation.pptxCarlos105
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptxmary850239
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 

Recently uploaded (20)

Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptx
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Barangay Council for the Protection of Children (BCPC) Orientation.pptx
Barangay Council for the Protection of Children (BCPC) Orientation.pptxBarangay Council for the Protection of Children (BCPC) Orientation.pptx
Barangay Council for the Protection of Children (BCPC) Orientation.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptxLEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptxFINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 

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