Lecture 8 Gestures JSON
>> YOUR LINK HERE: ___ http://youtube.com/watch?v=mz-rNLWJ0bk
Lecture 8 of Stanford’s iOS development course from Spring 2020 covers some persistence topics (UserDefaults API and JSON encoding/decoding) and the conceptual underpinnings of multi-touch gesture handling. We start adding these capabilities to EmojiArt by making its Model be convertible to/from JSON (using the Codable protocol) and then storing it (for now) in a lightweight storage vehicle. After that, pinch and drag gestures are added to EmojiArt to allow the user to zoom in and out and pan around in their document.","styleRuns":[{"startIndex":0,"length":525,"styleRunExtensions":{"styleRunColorMapExtension":{"colorMap":[{"key":"USER_INTERFACE_THEME_DARK","value":4294967295},{"key":"USER_INTERFACE_THEME_LIGHT","value":4279440147}]}},"fontFamilyName":"Roboto"}]},"headerRuns":[{"startIndex":0,"length":525,"headerMapping":"ATTRIBUTED_STRING_HEADER_MAPPING_UNSPECIFIED"}]}},{"itemSectionRenderer":{"contents":[{"messageRenderer":{"text":{"runs":[{"text":"Reacties staan uit. "},{"text":"Meer informatie","navigationEndpoint":{"clickTrackingParams":"CNoBEJY7GAAiEwjLxuXNuJSKAxXweHoFHaSbETA=","commandMetadata":{"webCommandMetadata":{"url":"https://support.google.com/youtube/answer/9706180?hl=nl","webPageType":"WEB_PAGE_TYPE_UNKNOWN","rootVe":83769}},"urlEndpoint":{"url":"https://support.google.com/youtube/answer/9706180?hl=nl"}}}]},"trackingParams":"CNoBEJY7GAAiEwjLxuXNuJSKAxXweHoFHaSbETA="}}],"trackingParams":"CNkBELsvGAIiEwjLxuXNuJSKAxXweHoFHaSbETA=","sectionIdentifier":"comment-item-section"}}],"trackingParams":"CNgBELovIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},"secondaryResults":{"secondaryResults":{"results":[{"compactVideoRenderer":{"videoId":"tmx-OwkBWxA","thumbnail":{"thumbnails":[{"url":"https://i.ytimg.com/vi/tmx-OwkBWxA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG rs=AOn4CLATqzKeo3BELjGRnPq4m1O-YSlH5Q","width":168,"height":94},{"url":"https://i.ytimg.com/vi/tmx-OwkBWxA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg== rs=AOn4CLCtitI1N8lOJTqMgnIg_27tqK8sfA","width":336,"height":188}]},"title":{"accessibility":{"accessibilityData":{"label":"Lecture 7: Multithreading EmojiArt door Stanford 39.329 weergaven 4 jaar geleden 1 uur en 30 minuten"}},"simpleText":"Lecture 7: Multithreading EmojiArt"},"longBylineText":{"runs":[{"text":"Stanford","navigationEndpoint":{"clickTrackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETAyB3JlbGF0ZWQ=","commandMetadata":{"webCommandMetadata":{"url":"/@stanford","webPageType":"WEB_PAGE_TYPE_CHANNEL","rootVe":3611,"apiUrl":"/youtubei/v1/browse"}},"browseEndpoint":{"browseId":"UC-EnprmCZ3OXyAoG7vjVNCA","canonicalBaseUrl":"/@stanford"}}}]},"publishedTimeText":{"simpleText":"4 jaar geleden"},"viewCountText":{"simpleText":"39.329 weergaven"},"lengthText":{"accessibility":{"accessibilityData":{"label":"1 uur, 30 minuten en 58 seconden"}},"simpleText":"1:30:58"},"navigationEndpoint":{"clickTrackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETAyB3JlbGF0ZWRIuaOnrMvm6p-bAZoBBQgBEPgd","commandMetadata":{"webCommandMetadata":{"url":"/watch?v=tmx-OwkBWxA","webPageType":"WEB_PAGE_TYPE_WATCH","rootVe":3832}},"watchEndpoint":{"videoId":"tmx-OwkBWxA","nofollow":true,"watchEndpointSupportedOnesieConfig":{"html5PlaybackOnesieConfig":{"commonConfig":{"url":"https://rr4---sn-5hne6nzd.googlevideo.com/initplayback?source=youtube oeis=1 c=WEB oad=3200 ovd=3200 oaad=11000 oavd=11000 ocs=700 oewis=1 oputc=1 ofpcc=1 msp=1 odepv=1 id=b66c7e3b09015b10 ip=185.14.28.206 mt=1733531944 oweuc= pxtags=Cg4KAnR4Egg1MTMzNzAwMA rxtags=Cg4KAnR4Egg1MTMzNjk5OQ%2CCg4KAnR4Egg1MTMzNzAwMA%2CCg4KAnR4Egg1MTMzNzAwMQ"}}}}},"shortBylineText":{"runs":[{"text":"Stanford","navigationEndpoint":{"clickTrackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETAyB3JlbGF0ZWQ=","commandMetadata":{"webCommandMetadata":{"url":"/@stanford","webPageType":"WEB_PAGE_TYPE_CHANNEL","rootVe":3611,"apiUrl":"/youtubei/v1/browse"}},"browseEndpoint":{"browseId":"UC-EnprmCZ3OXyAoG7vjVNCA","canonicalBaseUrl":"/@stanford"}}}]},"channelThumbnail":{"thumbnails":[{"url":"https://yt3.ggpht.com/ADFxSeyOWjOWtfEsg3mBpwAX3PQ0XhK0C6fsKG3XmLGjonEe-QrU8tWJ2n4Ug8EAWYjXT0tt=s68-c-k-c0x00ffffff-no-rj","width":68,"height":68}]},"trackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETBAkLaFyLDHn7a2AQ==","shortViewCountText":{"accessibility":{"accessibilityData":{"label":"39 duizend weergaven"}},"simpleText":"39K weergaven"},"menu":{"menuRenderer":{"items":[{"menuServiceItemRenderer":{"text":{"runs":[{"text":"Toevoegen aan wachtrij"}]},"icon":{"iconType":"ADD_TO_QUEUE_TAIL"},"serviceEndpoint":{"clickTrackingParams":"CNYBEP6YBBgFIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true}},"signalServiceEndpoint":{"signal":"CLIENT_SIGNAL","actions":[{"clickTrackingParams":"CNYBEP6YBBgFIhMIy8blzbiUigMV8Hh6BR2kmxEw","addToPlaylistCommand":{"openMiniplayer":false,"openListPanel":true,"videoId":"tmx-OwkBWxA","listType":"PLAYLIST_EDIT_LIST_TYPE_QUEUE","onCreateListCommand":{"clickTrackingParams":"CNYBEP6YBBgFIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true,"apiUrl":"/youtubei/v1/playlist/create"}},"createPlaylistServiceEndpoint":{"videoIds":["tmx-OwkBWxA"],"params":"CAQ%3D"}},"videoIds":["tmx-OwkBWxA"]}},{"clickTrackingParams":"CNYBEP6YBBgFIhMIy8blzbiUigMV8Hh6BR2kmxEw","openPopupAction":{"popup":{"notificationActionRenderer":{"responseText":{"simpleText":"Toegevoegd aan wachtrij"},"trackingParams":"CNcBELlqIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},"popupType":"TOAST"}}]}},"trackingParams":"CNYBEP6YBBgFIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},{"menuServiceItemDownloadRenderer":{"serviceEndpoint":{"clickTrackingParams":"CNUBENGqBRgGIhMIy8blzbiUigMV8Hh6BR2kmxEw","offlineVideoEndpoint":{"videoId":"tmx-OwkBWxA","onAddCommand":{"clickTrackingParams":"CNUBENGqBRgGIhMIy8blzbiUigMV8Hh6BR2kmxEw","getDownloadActionCommand":{"videoId":"tmx-OwkBWxA","params":"CAIQAA%3D%3D"}}}},"trackingParams":"CNUBENGqBRgGIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},{"menuServiceItemRenderer":{"text":{"runs":[{"text":"Delen"}]},"icon":{"iconType":"SHARE"},"serviceEndpoint":{"clickTrackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETA=","commandMetadata":{"webCommandMetadata":{"sendPost":true,"apiUrl":"/youtubei/v1/share/get_share_panel"}},"shareEntityServiceEndpoint":{"serializedShareEntity":"Cgt0bXgtT3drQld4QQ%3D%3D","commands":[{"clickTrackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETA=","openPopupAction":{"popup":{"unifiedSharePanelRenderer":{"trackingParams":"CNQBEI5iIhMIy8blzbiUigMV8Hh6BR2kmxEw","showLoadingSpinner":true}},"popupType":"DIALOG","beReused":true}}]}},"trackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETA=","hasSeparator":true}}],"trackingParams":"CNEBEKQwGAAiEwjLxuXNuJSKAxXweHoFHaSbETA=","accessibility":{"accessibilityData":{"label":"Actiemenu"}},"targetId":"watch-related-menu-button"}},"thumbnailOverlays":[{"thumbnailOverlayTimeStatusRenderer":{"text":{"accessibility":{"accessibilityData":{"label":"1 uur, 30 minuten en 58 seconden"}},"simpleText":"1:30:58"},"style":"DEFAULT"}},{"thumbnailOverlayToggleButtonRenderer":{"isToggled":false,"untoggledIcon":{"iconType":"WATCH_LATER"},"toggledIcon":{"iconType":"CHECK"},"untoggledTooltip":"Later bekijken","toggledTooltip":"Toegevoegd","untoggledServiceEndpoint":{"clickTrackingParams":"CNMBEPnnAxgBIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true,"apiUrl":"/youtubei/v1/browse/edit_playlist"}},"playlistEditEndpoint":{"playlistId":"WL","actions":[{"addedVideoId":"tmx-OwkBWxA","action":"ACTION_ADD_VIDEO"}]}},"toggledServiceEndpoint":{"clickTrackingParams":"CNMBEPnnAxgBIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true,"apiUrl":"/youtubei/v1/browse/edit_playlist"}},"playlistEditEndpoint":{"playlistId":"WL","actions":[{"action":"ACTION_REMOVE_VIDEO_BY_VIDEO_ID","removedVideoId":"tmx-OwkBWxA"}]}},"untoggledAccessibility":{"accessibilityData":{"label":"Later bekijken"}},"toggledAccessibility":{"accessibilityData":{"label":"Toegevoegd"}},"trackingParams":"CNMBEPnnAxgBIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},{"thumbnailOverlayToggleButtonRenderer":{"untoggledIcon":{"iconType":"ADD_TO_QUEUE_TAIL"},"toggledIcon":{"iconType":"PLAYLIST_ADD_CHECK"},"untoggledTooltip":"Toevoegen aan wachtrij","toggledTooltip":"Toegevoegd","untoggledServiceEndpoint":{"clickTrackingParams":"CNIBEMfsBBgCIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true}},"signalServiceEndpoint":{"signal":"CLIENT_SIGNAL","actions":[{"clickTrackingParams":"CNIBEMfsBBgCIhMIy8blzbiUigMV8Hh6BR2kmxEw","addToPlaylistCommand":{"openMiniplayer":false,"openListPanel":true,"videoId":"tmx-OwkBWxA","listType":"PLAYLIST_EDIT_LIST_TYPE_QUEUE","onCreateListCommand":{"clickTrackingParams":"CNIBEMfsBBgCIhMIy8blzbiUigMV8Hh6BR2kmxEw","commandMetadata":{"webCommandMetadata":{"sendPost":true,"apiUrl":"/youtubei/v1/playlist/create"}},"createPlaylistServiceEndpoint":{"videoIds":["tmx-OwkBWxA"],"params":"CAQ%3D"}},"videoIds":["tmx-OwkBWxA"]}}]}},"untoggledAccessibility":{"accessibilityData":{"label":"Toevoegen aan wachtrij"}},"toggledAccessibility":{"accessibilityData":{"label":"Toegevoegd"}},"trackingParams":"CNIBEMfsBBgCIhMIy8blzbiUigMV8Hh6BR2kmxEw"}},{"thumbnailOverlayNowPlayingRenderer":{"text":{"runs":[{"text":"Wordt nu afgespeeld"}]}}}],"accessibility":{"accessibilityData":{"label":"Lecture 7: Multithreading EmojiArt - 1 uur en 30 minuten - Naar kanaal gaan - Stanford - 39K weergaven - 4 jaar geleden - video afspelen"}},"richThumbnail":{"movingThumbnailRenderer":{"enableHoveredLogging":true,"enableOverlay":true}}}},{"lockupViewModel":{"contentImage":{"collectionThumbnailViewModel":{"primaryThumbnail":{"thumbnailViewModel":{"image":{"sources":[{"url":"https://i.ytimg.com/vi/yOhyOpXvaec/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ== rs=AOn4CLDinxiUZIWo9JJ1D0WRFxUJnfB1Zg","width":168,"height":94},{"url":"https://i.ytimg.com/vi/yOhyOpXvaec/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE= rs=AOn4CLC4SXG_bCZPLB0PogiyzCinNEk_Vw","width":336,"height":188}]},"overlays":[{"thumbnailOverlayBadgeViewModel":{"thumbnailBadges":[{"thumbnailBadgeViewModel":{"icon":{"sources":[{"clientResource":{"imageName":"PLAYLISTS"}}]},"text":"15 video's","badgeStyle":"THUMBNAIL_OVERLAY_BADGE_STYLE_DEFAULT","backgroundColor":{"lightTheme":2500134,"darkTheme":2500134}}}],"position":"THUMBNAIL_OVERLAY_BADGE_POSITION_BOTTOM_END"}},{"thumbnailHoverOverlayViewModel":{"icon":{"sources":[{"clientResource":{"imageName":"PLAY_ALL"}}]},"text":{"content":"Alles afspelen","styleRuns":[{"startIndex":0,"length":14}]},"style":"THUMBNAIL_HOVER_OVERLAY_STYLE_COVER"}}],"backgroundColor":{"lightTheme":3618615,"darkTheme":3618615}}},"stackColor":{"lightTheme":10066329,"darkTheme":9211020}}},"metadata":{"lockupMetadataViewModel":{"title":{"content":"CS193p iPhone Application Development Spring 2020"},"metadata":{"contentMetadataViewModel":{"metadataRows":[{"metadataParts":[{"text":{"content":"Stanford
#############################