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

【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法モノビット エンジン
 
Заняття 44_Лабораторна робота № 12
Заняття 44_Лабораторна робота № 12Заняття 44_Лабораторна робота № 12
Заняття 44_Лабораторна робота № 12Yor11
 
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczne
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczneBlok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczne
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczneEdukacja online
 
Създаване на сайт за рекламна агенция - Курсова работа
Създаване на сайт за рекламна агенция - Курсова работаСъздаване на сайт за рекламна агенция - Курсова работа
Създаване на сайт за рекламна агенция - Курсова работаAnita Nestorova
 
PHP Version Up と AWS への移行
PHP Version Up と AWS への移行PHP Version Up と AWS への移行
PHP Version Up と AWS への移行gree_tech
 
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1Amazon Web Services Korea
 
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczych
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczychBlok III Lekcja 7: Układy hamulcowe pojazdów rolniczych
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczychEdukacja online
 
PHPからJavaへ乗り換えた。そんな昔話をしよう
PHPからJavaへ乗り換えた。そんな昔話をしようPHPからJavaへ乗り換えた。そんな昔話をしよう
PHPからJavaへ乗り換えた。そんな昔話をしよう優介 黒河
 
стрілецька зброя
стрілецька зброястрілецька зброя
стрілецька зброяolga_ruo
 
Внутрішній порядок у військовій частині та її підрозділах
Внутрішній порядок у військовій частині та її підрозділахВнутрішній порядок у військовій частині та її підрозділах
Внутрішній порядок у військовій частині та її підрозділахsh75inf
 

What's hot (14)

【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
 
CV'S & CERTIFICATE FERRY PATLANCE
CV'S & CERTIFICATE FERRY PATLANCECV'S & CERTIFICATE FERRY PATLANCE
CV'S & CERTIFICATE FERRY PATLANCE
 
Заняття 44_Лабораторна робота № 12
Заняття 44_Лабораторна робота № 12Заняття 44_Лабораторна робота № 12
Заняття 44_Лабораторна робота № 12
 
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczne
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczneBlok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczne
Blok III Lekcja 4: Paliwa silnikowe, oleje i smary techniczne
 
Създаване на сайт за рекламна агенция - Курсова работа
Създаване на сайт за рекламна агенция - Курсова работаСъздаване на сайт за рекламна агенция - Курсова работа
Създаване на сайт за рекламна агенция - Курсова работа
 
PHP Version Up と AWS への移行
PHP Version Up と AWS への移行PHP Version Up と AWS への移行
PHP Version Up と AWS への移行
 
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
 
8.2
8.28.2
8.2
 
Układ zasilania silników o zapłonie samoczynnym
Układ zasilania silników o zapłonie samoczynnymUkład zasilania silników o zapłonie samoczynnym
Układ zasilania silników o zapłonie samoczynnym
 
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczych
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczychBlok III Lekcja 7: Układy hamulcowe pojazdów rolniczych
Blok III Lekcja 7: Układy hamulcowe pojazdów rolniczych
 
PHPからJavaへ乗り換えた。そんな昔話をしよう
PHPからJavaへ乗り換えた。そんな昔話をしようPHPからJavaへ乗り換えた。そんな昔話をしよう
PHPからJavaへ乗り換えた。そんな昔話をしよう
 
стрілецька зброя
стрілецька зброястрілецька зброя
стрілецька зброя
 
9.2
9.29.2
9.2
 
Внутрішній порядок у військовій частині та її підрозділах
Внутрішній порядок у військовій частині та її підрозділахВнутрішній порядок у військовій частині та її підрозділах
Внутрішній порядок у військовій частині та її підрозділах
 

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

On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptx
On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptxOn_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptx
On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptxPooja Bhuva
 
Philosophy of china and it's charactistics
Philosophy of china and it's charactisticsPhilosophy of china and it's charactistics
Philosophy of china and it's charactisticshameyhk98
 
21st_Century_Skills_Framework_Final_Presentation_2.pptx
21st_Century_Skills_Framework_Final_Presentation_2.pptx21st_Century_Skills_Framework_Final_Presentation_2.pptx
21st_Century_Skills_Framework_Final_Presentation_2.pptxJoelynRubio1
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jisc
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17Celine George
 
OSCM Unit 2_Operations Processes & Systems
OSCM Unit 2_Operations Processes & SystemsOSCM Unit 2_Operations Processes & Systems
OSCM Unit 2_Operations Processes & SystemsSandeep D Chaudhary
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxAreebaZafar22
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.christianmathematics
 
latest AZ-104 Exam Questions and Answers
latest AZ-104 Exam Questions and Answerslatest AZ-104 Exam Questions and Answers
latest AZ-104 Exam Questions and Answersdalebeck957
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...Poonam Aher Patil
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsMebane Rash
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxJisc
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfSherif Taha
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxheathfieldcps1
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - Englishneillewis46
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfDr Vijay Vishwakarma
 

Recently uploaded (20)

On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptx
On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptxOn_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptx
On_Translating_a_Tamil_Poem_by_A_K_Ramanujan.pptx
 
Philosophy of china and it's charactistics
Philosophy of china and it's charactisticsPhilosophy of china and it's charactistics
Philosophy of china and it's charactistics
 
21st_Century_Skills_Framework_Final_Presentation_2.pptx
21st_Century_Skills_Framework_Final_Presentation_2.pptx21st_Century_Skills_Framework_Final_Presentation_2.pptx
21st_Century_Skills_Framework_Final_Presentation_2.pptx
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17
 
OSCM Unit 2_Operations Processes & Systems
OSCM Unit 2_Operations Processes & SystemsOSCM Unit 2_Operations Processes & Systems
OSCM Unit 2_Operations Processes & Systems
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
latest AZ-104 Exam Questions and Answers
latest AZ-104 Exam Questions and Answerslatest AZ-104 Exam Questions and Answers
latest AZ-104 Exam Questions and Answers
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptx
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
 

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