www.it-ebooks.info www.it-ebooks.info Matt Neuburg FOURTH EDITION Programming iOS 7 www.it-ebooks.info Programming iOS 7, Fourth Edition by Matt Neuburg Copyright © 2014 Matt Neuburg. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://my.safaribooksonline.com). For more information, contact our corporate/ institutional sales department: (800) 998-9938 or corporate@oreilly.com. Editor: Rachel Roumeliotis Production Editor: Kristen Brown Proofreader: O’Reilly Production Services Indexer: Matt Neuburg Cover Designer: Randy Comer Interior Designer: David Futato Illustrator: Matt Neuburg May 2011: First Edition March 2012: Second Edition March 2013: Third Edition December 2013: Fourth Edition Revision History for the Fourth Edition: 2013-12-09: First release See http://oreilly.com/catalog/errata.csp?isbn=9781449372347 for release details. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Programming iOS 7, the image of a kingbird, and related trade dress are trademarks of O’Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc., was aware of a trade‐ mark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. ISBN: 978-1-449-37234-7 [LSI] www.it-ebooks.info Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Part I. Views 1. Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 The Window 4 Experimenting With Views 7 Subview and Superview 8 Visibility and Opacity 11 Frame 12 Bounds and Center 13 Transform 16 Layout 22 Autoresizing 23 Autolayout 27 Constraints in the Nib 38 Order of Layout Events 45 Autolayout and View Transforms 46 2. Drawing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 UIImage and UIImageView 49 Resizable Images 53 Image Rendering Mode 56 Graphics Contexts 58 UIImage Drawing 61 CGImage Drawing 63 Snapshots 66 CIFilter and CIImage 68 Drawing a UIView 72 iii www.it-ebooks.info Graphics Context Settings 74 Paths and Shapes 75 Clipping 79 Gradients 80 Colors and Patterns 82 Graphics Context Transforms 84 Shadows 86 Erasing 87 Points and Pixels 88 Content Mode 89 3. Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 View and Layer 92 Layers and Sublayers 94 Manipulating the Layer Hierarchy 97 Positioning a Sublayer 98 CAScrollLayer 99 Layout of Sublayers 99 Drawing in a Layer 100 Content Resizing and Positioning 104 Layers that Draw Themselves 106 Transforms 108 Depth 111 Shadows, Borders, and Masks 115 Layer Efficiency 116 Layers and Key–Value Coding 118 4. Animation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Drawing, Animation, and Threading 122 UIImageView and UIImage Animation 125 View Animation 126 Block-Based View Animation 127 View Animation Options 129 Springing View Animation 134 Keyframe View Animation 134 Transitions 136 Implicit Layer Animation 138 Animation Transactions 140 Media Timing Functions 141 Core Animation 143 CABasicAnimation and Its Inheritance 143 Using a CABasicAnimation 145 iv | Table of Contents www.it-ebooks.info Keyframe Animation 149 Making a Property Animatable 150 Grouped Animations 151 Transitions 155 Animations List 157 Actions 159 What an Action Is 160 Action Search 160 Hooking Into the Action Search 162 Nonproperty Actions 164 Emitter Layers 166 CIFilter Transitions 171 UIKit Dynamics 174 Motion Effects 180 Animation and Autolayout 181 5. Touches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Touch Events and Views 186 Receiving Touches 187 Restricting Touches 189 Interpreting Touches 190 Gesture Recognizers 195 Gesture Recognizer Classes 195 Gesture Recognizer Conflicts 200 Subclassing Gesture Recognizers 203 Gesture Recognizer Delegate 205 Gesture Recognizers in the Nib 207 Touch Delivery 208 Hit-Testing 208 Initial Touch Event Delivery 214 Gesture Recognizer and View 214 Touch Exclusion Logic 216 Gesture Recognition Logic 216 Touches and the Responder Chain 218 Part II. Interface 6. View Controllers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 View Controller Responsibilities 224 View Controller Hierarchy 225 View Controller Creation 231 Table of Contents | v www.it-ebooks.info How a View Controller Gets Its View 234 Manual View 235 Generic Automatic View 237 View in a Separate Nib 238 Nib-Instantiated View Controller 241 Storyboard-Instantiated View Controller 243 View Resizing and the Status Bar 245 Rotation 251 Rotation and Layout Events 254 Initial Orientation 258 Presented View Controller 261 Presenting a View 262 Communication With a Presented View Controller 264 Presented View Animation 267 Presentation Styles 268 Rotation of a Presented View 271 Presenting a View in Response to Rotation 273 Tab Bar Controllers 274 Tab Bar Items 276 Configuring a Tab Bar Controller 277 Navigation Controllers 279 Bar Button Items 282 Navigation Items and Toolbar Items 284 Configuring a Navigation Controller 287 Custom Transition Animations 290 Noninteractive Custom Transition Animation 291 Interactive Custom Transition Animation 294 Custom Presented View Controller Transition 301 Transition Coordinator 308 Page View Controller 310 Container View Controllers 315 Storyboards 320 Segues 322 Container Views 324 Unwind Segues 325 View Controller Lifetime Events 329 Incoherencies in View Controller Events 332 Appear and Disappear Events 332 Manual Event Forwarding to a Child View Controller 333 View Controller Memory Management 335 State Restoration 337 How to Test State Restoration 338 vi | Table of Contents www.it-ebooks.info Participating in State Restoration 339 Restoration ID, Identifier Path, and Restoration Class 341 Restoring View Controller State 348 Restoration Order of Operations 353 Restoration of Other Objects 355 Snapshot Suppression 357 7. Scroll Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Creating a Scroll View in Code 360 Using a Content View 363 Scroll View in a Nib 365 Scrolling 367 Paging 371 Tiling 373 Zooming 375 Zooming Programmatically 376 Zooming with Detail 377 Scroll View Delegate 380 Scroll View Touches 382 Floating Scroll View Subviews 386 Scroll View Performance 387 8. Table Views and Collection Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Table View Cells 392 Built-In Cell Styles 393 Registering a Cell Class 399 Custom Cells 401 Table View Data 408 The Three Big Questions 409 Reusing Cells 411 Table View Sections 413 Section Index 418 Refreshing Table View Data 419 Variable Row Heights 423 Table View Cell Selection 426 Managing Cell Selection 426 Responding to Cell Selection 427 Navigation From a Table View 429 Cell Choice and Static Tables 430 Table View Scrolling and Layout 432 Table View State Restoration 432 Table View Searching 433 Table of Contents | vii www.it-ebooks.info Table View Editing 442 Deleting Table Items 445 Editable Content in Table Items 446 Inserting Table Items 448 Rearranging Table Items 450 Dynamic Table Items 451 Table View Menus 453 Collection Views 455 Collection View Classes 459 Using a Collection View 462 Custom Collection View Layouts 465 Switching Layouts 469 Collection Views and UIKit Dynamics 470 9. Popovers and Split Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Preparing a Popover 475 Popover Size 476 Popover Appearance Customization 477 Summoning and Dismissing a Popover 480 Popover Segues 480 Managing a Popover Controller 481 Dismissing a Popover 482 Popovers During Rotation or Backgrounding 485 Popovers and Presented Views 486 Automatic Popovers 487 Split Views 489 Using a Split View 489 Split Views in a Storyboard 491 Other Split View Configurations 492 10. Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Fonts 494 Fonts and Dynamic Type 494 Font Descriptors 497 Attributed Strings 499 Attributed String Attributes 500 Making an Attributed String 503 Modifying and Querying an Attributed String 508 Measuring and Drawing an Attributed String 509 Labels 511 Number of Lines 511 Wrapping and Truncation 512 viii | Table of Contents www.it-ebooks.info [...]... fourth edition, has grown in size to encompass the growth in its subject, until it can grow no more The previous editions — Programming iOS 4 (May 2011), Programming iOS 5 (March 2012), and Programming iOS 6 (March 2013) — were approximately 800 pp., 950 pp., and 1150 pp in length, respectively, not because I had more to say each time, but because Apple, as it added features to iOS 4 to make iOS 5,... This book, Programming iOS 7, comprising chapters 14–40 of the earlier books The truth is that this is a division I had wanted to make even before Programming iOS 4 was published — indeed, before it was even conceived of My original proposal to O’Reilly Media, back in early 2010, had been for a book to be called Fundamentals of Cocoa Programming, intended to cover very much the same material as iOS 7 Program‐... basics having been laid down in iOS 7 Programming Fundamentals, this book, Programming iOS 7, assumes that you already know Objective-C and how to work with Xcode to edit code and nibs, make properties and outlets and actions, and so forth, and proceeds to explain the constituents of practical iOS app construction: • Part I describes views, the fundamental units of an iOS app’s interface Views are what... done) complain that the book is occupied with 13 preliminary chapters before the reader starts really writing any significant iOS code, because those 13 chapters have now been abstracted into a separate volume, iOS 7 Programming Fundamentals, and this book, Programming iOS 7, now begins, like Homer’s Iliad, in the middle of the story, with the reader jumping with all four feet into views and view controllers,... thorough grounding in those underpinnings might in fact be desirable, iOS 7 Programming Fundamentals will still be available and awaiting study Moreover, the existence of iOS 7 Programming Fundamentals means that I, as author and teacher, can make the same assumption in this edition about you, as reader and student, that I made in previous editions — namely, that you have a command of the material in that... I’m sorry to say, O’Reilly Media were implacably opposed Thus, Programming iOS 7, though it starts with its own Chapter 1 and page 1, never‐ theless still picks up exactly where iOS 7 Programming Fundamentals leaves off They complement and supplement one another Those who desire a complete grounding in the knowledge needed to begin writing iOS apps with a solid and rigorous understand‐ ing of what they... to iOS 5 to make iOS 6, had given me more to describe Now iOS 7 has come along with even more new features, and drastic action was needed Accordingly, the book has been ripped violently but neatly in two — neatly, because there was already a perfectly natural place to do the ripping, namely right after the end of what used to be Part III (Chapter 13) There are now two books: • A new book, iOS 7 Programming. .. that you know how to make and work with a xib file when you need one, as this is explained in iOS 7 Programming Funda‐ mentals.) I have also embraced, often without much fanfare, the various other iOS 7 and Xcode 5 innovations Apple has clearly set out, with this generation of their software, to make iOS programming easier and more pleasant than ever; and by and large they have suc‐ ceeded For example,... it goes without saying, is conversant with the material in iOS 7 Programming Fundamentals) will, I believe, be capable of writing a real-life iOS app, and to do so with a clear understanding of what he or she is doing and where the app is going as it grows and develops The book itself doesn’t show how to write any particularly interesting iOS apps (though it is backed by dozens of example projects... the same token, many areas of iOS are not treated at all in this book: OpenGL An open source C library for drawing, including 3D drawing, that takes full ad‐ vantage of graphics hardware This is often the most efficient way to draw, especially when animation is involved iOS incorporates a simplified version of OpenGL called OpenGL ES See Apple’s OpenGL Programming Guide for iOS Open GL interface configuration, . www.it-ebooks.info www.it-ebooks.info Matt Neuburg FOURTH EDITION Programming iOS 7 www.it-ebooks.info Programming iOS 7, Fourth Edition by Matt Neuburg Copyright © 2014 Matt Neuburg. All rights. fourth edition, has grown in size to encompass the growth in its subject, until it can grow no more. The previous editions — Programming iOS 4 (May 2011), Programming iOS 5 (March 2012), and Programming. writing any significant iOS code, because those 13 chapters have now been abstracted into a separate volume, iOS 7 Programming Fundamentals, and this book, Programming iOS 7, now begins, like Homer’s