

{"id":2637,"date":"2017-02-02T17:23:56","date_gmt":"2017-02-02T14:23:56","guid":{"rendered":"https:\/\/tubikstudio.com\/?p=2637"},"modified":"2023-08-15T08:11:10","modified_gmt":"2023-08-15T08:11:10","slug":"case-study-upper-app-coding-ui-animation","status":"publish","type":"post","link":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/","title":{"rendered":"Case Study: Upper App. Coding UI Animation"},"content":{"rendered":"<p><span style=\"color: #333333;\">No doubt, animation of interfaces still belongs to the most debatable issues between designers and developers. Animated UI elements often set the challenge to developers, so to enhance the usability of an app or a website, the motion should be grounded on user research and add its two cents to the positive user experience. Developers in Tubik are open to this sort of challenges: earlier we have already shown the case on coding motion for <a style=\"color: #333333;\" href=\"https:\/\/tubikstudio.com\/case-study-toonie-ui-animation-development\/\">Toonie Alarm<\/a>, this time we are continuing the theme with a practical case of developing animated interactions for <a style=\"color: #333333;\" href=\"https:\/\/tubikstudio.com\/case-study-upper-app-ui-design-for-to-do-list\/\">Upper App<\/a>.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #333333;\">Back to Basics: Core Animation and\u00a0UIViewPropertyAnimator<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Supporting designers and developers in creating attractive and functional interfaces for iOS apps, in 2006 Apple presented <a style=\"color: #333333;\" href=\"https:\/\/developer.apple.com\/library\/content\/documentation\/Cocoa\/Conceptual\/CoreAnimation_guide\/CoreAnimationBasics\/CoreAnimationBasics.html\" rel=\"nofollow\">Core Animation<\/a>, a system for animating views and UI elements of the app. Basically, it is a graphics compositing framework used by MacOS, iOS, watchOS, and tvOS to produce user interfaces with motion. It is not a replacement for the app views: instead, it is a technology that integrates with views to provide support for animating their content. However, animation is not the only part of this framework: Core Animation presents the infrastructure for compositing and manipulating visual content. The framework uses GPU to accelerate rendering screen objects. Core Animation divides the visual content into individual objects that are called layers and arranges them in a tree hierarchy known as the layer tree.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The fundamental class that represents these layout objects is the <em>CALayer class<\/em>. It looks similar to UIViews implementation. The <em>CALayer<\/em> class manages image-based content and allows performing animations on that content. The main task of the layer is to manage the visual content but it also has visual attributes that can be set such as a background color, border, and shadow. In addition to managing visual content, the layer maintains information about the geometry of its content (such as position, size, and transform) used to present it on the screen. Modifying the properties of the layer is the way to initiate animations on the layer content or geometry. The app runs an animation. Layout, Display, Prepare and Commit phases are performed once before the animation starts. At this time the model layer is updated. The animation itself is rendered in a separate process on the render server using the presentation layer.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14641\" src=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1.png\" alt=\"iOS-animation\" width=\"1802\" height=\"860\" srcset=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1.png 1802w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1-300x143.png 300w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1-768x367.png 768w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1-1024x489.png 1024w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/iOS-animation-1-1-150x72.png 150w\" sizes=\"auto, (max-width: 1802px) 100vw, 1802px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Nevertheless, whenever developers would like to interact with the animation (for example, pause or restart), it most likely leads to a huge piece of work. iOS open source community offers 3rd party (HTML, CSS, JavaScript) frameworks that can take care of this problem, like Pop, Interpolate and other.<\/span><\/p>\n<p><span style=\"color: #333333;\">iOS 10 provides a new way to animate that is <em><a style=\"color: #333333;\" href=\"https:\/\/developer.apple.com\/reference\/uikit\/uiviewpropertyanimator\" rel=\"nofollow\">UIViewPropertyAnimator<\/a><\/em>. <em>UIViewPropertyAnimator<\/em> was presented in 2016 and it provides more extensive functionality on operations with animated interfaces. Vital to mention, it can be accessed only via iOS 10+ and tvOS 10+. The class allows developers to animate changes to views and dynamically modify the animations before they finish. This means programmers can stop (pause) in-progress animation, restart it at a later date if they wish and even dynamically modify the animated properties, for example, change the animation end-point to the top-right of the screen when it was previously the bottom-left. Developers can simply call the <em>startAnimation()<\/em> function on this instance to start the animation or animations. Anything that can be animated by the previous UIView API is eligible to be used in a<em> UIViewPropertyAnimator<\/em> instance. Here are its options:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">Frame<\/span><\/li>\n<li><span style=\"color: #333333;\">Bounds<\/span><\/li>\n<li><span style=\"color: #333333;\">Center<\/span><\/li>\n<li><span style=\"color: #333333;\">Alpha<\/span><\/li>\n<li><span style=\"color: #333333;\">Background color<\/span><\/li>\n<li><span style=\"color: #333333;\">Transform (as long as it is a transformation in the 2D space, for 3D only with CoreAnimation)<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><em>UIViewPropertyAnimator<\/em> gives programmatic control over the timing and execution of the animations. Let&#8217;s sum up\u00a0what are the core differences of\u00a0<em>UIViewPropertyAnimator<\/em> from\u00a0CAAnimation:<\/span><br \/>\n<span style=\"color: #333333;\">1. After the creation of the UIViewPropertyAnimator object, the object of\u00a0CAAnimation isn&#8217;t created for the layer;<\/span><\/p>\n<p><span style=\"color: #333333;\">2. After starting\u00a0<i>UIViewPropertyAnimator <\/i><\/span>(by calling method\u00a0<i>startAnimation()<\/i>) CAAnimation is created and added to the layer for animated UIView<\/p>\n<p><span style=\"color: #333333;\">3. Animation exists until it&#8217;s completed or deleted<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The big advantage of\u00a0 <span style=\"font-weight: 400;\"><em>UIViewPropertyAnimator<\/em> is that it&#8217;s new and has been created on the basis of modern requirements and needs, taking into account the specific features of Swift.<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2644 size-full\" src=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1.png\" alt=\"runningPropertyAnimator\" width=\"1308\" height=\"219\" srcset=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1.png 1308w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1-300x50.png 300w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1-768x129.png 768w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1-1024x171.png 1024w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/runningPropertyAnimator-1-150x25.png 150w\" sizes=\"auto, (max-width: 1308px) 100vw, 1308px\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The comment in the API informs that Apple Company pushes this class as the default for creating animations on <i>UIView<\/i>. At the moment, it is recommended for creating animations in UIKit and it&#8217;s going to replace the methods\u00a0<i>UIView.animate(withDuration:)<\/i><\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #333333;\">Practical cases<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Here is a simple example of using <em>UIViewPropertyAnimator<\/em> in practical case:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2646\" src=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/ball-1.gif\" alt=\"ball UI animation\" width=\"800\" height=\"600\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><script src=\"https:\/\/gist.github.com\/artemkalinovsky\/2c3c93fa6e33b6c1f58aca9fadc03f9c.js\"><\/script>\u00a0 <\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">For comparison, here&#8217;s an example of code for the same animation, but accomplished with\u00a0<\/span><i>CoreAnimation<\/i> framework:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><script src=\"https:\/\/gist.github.com\/artemkalinovsky\/c5d31ea2a82c7fd87c14be9f5499e915.js\"><\/script><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Now let&#8217;s look closer how animation was created with\u00a0<i><span style=\"font-weight: 400;\">UIViewPropertyAnimator <\/span><\/i>for <a style=\"color: #333333;\" href=\"http:\/\/uppertodo.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Upper App<\/a> application, a simple and elegant to-do list for iPhones: here we present the case of interactions with the menu.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span style=\"color: #333333;\">Sample 1<\/span><\/h3>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2622\" src=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2-1024x683.jpg\" alt=\"upper app UI design case study\" width=\"1024\" height=\"683\" srcset=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2-1024x683.jpg 1024w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2-300x200.jpg 300w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2-768x512.jpg 768w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2-150x100.jpg 150w, https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><script src=\"https:\/\/gist.github.com\/artemkalinovsky\/dee4c65d177f334f11c1574c1b5bbb9c.js\"><\/script><\/span><\/p>\n<h3><span style=\"color: #333333;\">Sample 2<\/span><\/h3>\n<p><span style=\"color: #333333;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2643\" src=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/02\/hide-menu-1.gif\" alt=\"upper app ui animation development\" width=\"800\" height=\"600\" \/> \u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><script src=\"https:\/\/gist.github.com\/artemkalinovsky\/31b43e3e116de35413d7ec61adeb7b08.js\"><\/script><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><i>UIViewPropertyAnimaton<\/i> is really helpful in the process of iOS development: it simplifies the way for creating quite complex animations saving time and effort. Keep an eye on new posts: they will present fresh practical cases.<\/span><\/p>\n<hr \/>\n<p><span style=\"color: #333333;\"><em>Welcome to download <a style=\"color: #333333;\" href=\"https:\/\/itunes.apple.com\/ua\/app\/upper-app\/id1162733974?mt=8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Upper App via App Store<\/a><\/em><\/span><\/p>\n<p><span style=\"color: #333333;\"><em>Welcome to read more articles on <a style=\"color: #333333;\" href=\"https:\/\/tubikstudio.com\/blog\/development\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">iOS and web development<\/a><\/em><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications. <\/p>\n","protected":false},"author":3,"featured_media":2622,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,4,7,9],"tags":[57,467,139,468,142,469,270,482,275,491,319,504,324,326,336,437,440,447,457,16,463,20,465,21,466],"coauthors":[],"class_list":["post-2637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-animation","category-case_study","category-processes_and_tools","category-ui_ux","tag-case-study","tag-ui-design-practices","tag-design-psychology","tag-ui-design-process","tag-design-research","tag-ui-design-tips","tag-ios-animation-case-study","tag-user-experience","tag-ios-development-case-study","tag-user-interface","tag-mobile-app","tag-ux-design-article","tag-mobile-design-inspiration","tag-mobile-development-case-study","tag-motion-design","tag-tips","tag-tubik","tag-tubik-studio","tag-ui","tag-animation","tag-ui-design-article","tag-app-design","tag-ui-design-examples","tag-app-developer","tag-ui-design-inspiration"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Case Study: Upper App. Coding UI Animation<\/title>\n<meta name=\"description\" content=\"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Case Study: Upper App. Coding UI Animation\" \/>\n<meta property=\"og:description\" content=\"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/\" \/>\n<meta property=\"og:site_name\" content=\"Tubik Blog: Articles About Design\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-02T14:23:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-15T08:11:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marina Yalanska\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marina Yalanska\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/\",\"url\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/\",\"name\":\"Case Study: Upper App. Coding UI Animation\",\"isPartOf\":{\"@id\":\"https:\/\/tubikstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg\",\"datePublished\":\"2017-02-02T14:23:56+00:00\",\"dateModified\":\"2023-08-15T08:11:10+00:00\",\"author\":{\"@id\":\"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/320206b0076eb11ea0c0d4d17012c36f\"},\"description\":\"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.\",\"breadcrumb\":{\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage\",\"url\":\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg\",\"contentUrl\":\"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg\",\"width\":1500,\"height\":1000,\"caption\":\"upper app UI design case study\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/tubikstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Case Study: Upper App. Coding UI Animation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/#website\",\"url\":\"https:\/\/tubikstudio.com\/blog\/\",\"name\":\"Tubik Blog: Articles About Design\",\"description\":\"Tubik Studio\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/tubikstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/320206b0076eb11ea0c0d4d17012c36f\",\"name\":\"Marina Yalanska\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/image\/2ddde1c118fcf989ce8e73997a3909dd\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/630af235953a586b42ed17f9ea472b131bcde00719efc655984d63ca2078e7a2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/630af235953a586b42ed17f9ea472b131bcde00719efc655984d63ca2078e7a2?s=96&d=mm&r=g\",\"caption\":\"Marina Yalanska\"},\"url\":\"https:\/\/tubikstudio.com\/blog\/author\/marina-yalanska\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Case Study: Upper App. Coding UI Animation","description":"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/","og_locale":"en_US","og_type":"article","og_title":"Case Study: Upper App. Coding UI Animation","og_description":"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.","og_url":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/","og_site_name":"Tubik Blog: Articles About Design","article_published_time":"2017-02-02T14:23:56+00:00","article_modified_time":"2023-08-15T08:11:10+00:00","og_image":[{"width":1500,"height":1000,"url":"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg","type":"image\/jpeg"}],"author":"Marina Yalanska","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marina Yalanska","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/","url":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/","name":"Case Study: Upper App. Coding UI Animation","isPartOf":{"@id":"https:\/\/tubikstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage"},"image":{"@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg","datePublished":"2017-02-02T14:23:56+00:00","dateModified":"2023-08-15T08:11:10+00:00","author":{"@id":"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/320206b0076eb11ea0c0d4d17012c36f"},"description":"The practical case study showing UI animation development for Upper App and providing real examples and tools of coding motion for iOS applications.","breadcrumb":{"@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#primaryimage","url":"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg","contentUrl":"https:\/\/blog.tubikstudio.com\/wp-content\/uploads\/2017\/01\/Upper-App-to-do-list-2.jpg","width":1500,"height":1000,"caption":"upper app UI design case study"},{"@type":"BreadcrumbList","@id":"https:\/\/tubikstudio.com\/blog\/case-study-upper-app-coding-ui-animation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tubikstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Case Study: Upper App. Coding UI Animation"}]},{"@type":"WebSite","@id":"https:\/\/tubikstudio.com\/blog\/#website","url":"https:\/\/tubikstudio.com\/blog\/","name":"Tubik Blog: Articles About Design","description":"Tubik Studio","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tubikstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/320206b0076eb11ea0c0d4d17012c36f","name":"Marina Yalanska","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tubikstudio.com\/blog\/#\/schema\/person\/image\/2ddde1c118fcf989ce8e73997a3909dd","url":"https:\/\/secure.gravatar.com\/avatar\/630af235953a586b42ed17f9ea472b131bcde00719efc655984d63ca2078e7a2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/630af235953a586b42ed17f9ea472b131bcde00719efc655984d63ca2078e7a2?s=96&d=mm&r=g","caption":"Marina Yalanska"},"url":"https:\/\/tubikstudio.com\/blog\/author\/marina-yalanska\/"}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/posts\/2637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=2637"}],"version-history":[{"count":4,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/posts\/2637\/revisions"}],"predecessor-version":[{"id":14642,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/posts\/2637\/revisions\/14642"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/media\/2622"}],"wp:attachment":[{"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=2637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=2637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=2637"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/tubikstudio.com\/blog\/wp-json\/wp\/v2\/coauthors?post=2637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}