├── DrawingCanvas ├── storyborads │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── a0.imageset │ │ │ ├── a0.png │ │ │ └── Contents.json │ │ ├── a1.imageset │ │ │ ├── a1.jpeg │ │ │ └── Contents.json │ │ ├── a10.imageset │ │ │ ├── a10.png │ │ │ └── Contents.json │ │ ├── a12.imageset │ │ │ ├── a12.png │ │ │ └── Contents.json │ │ ├── a14.imageset │ │ │ ├── a14.png │ │ │ └── Contents.json │ │ ├── a15.imageset │ │ │ ├── a15.png │ │ │ └── Contents.json │ │ ├── a16.imageset │ │ │ ├── a16.png │ │ │ └── Contents.json │ │ ├── a17.imageset │ │ │ ├── a17.png │ │ │ └── Contents.json │ │ ├── a18.imageset │ │ │ ├── a18.png │ │ │ └── Contents.json │ │ ├── a19.imageset │ │ │ ├── a19.png │ │ │ └── Contents.json │ │ ├── a2.imageset │ │ │ ├── a2.png │ │ │ └── Contents.json │ │ ├── a20.imageset │ │ │ ├── a20.png │ │ │ └── Contents.json │ │ ├── a21.imageset │ │ │ ├── a21.png │ │ │ └── Contents.json │ │ ├── a22.imageset │ │ │ ├── a22.png │ │ │ └── Contents.json │ │ ├── a23.imageset │ │ │ ├── a23.png │ │ │ └── Contents.json │ │ ├── a24.imageset │ │ │ ├── a24.png │ │ │ └── Contents.json │ │ ├── a25.imageset │ │ │ ├── a25.png │ │ │ └── Contents.json │ │ ├── a26.imageset │ │ │ ├── a26.png │ │ │ └── Contents.json │ │ ├── a27.imageset │ │ │ ├── a27.png │ │ │ └── Contents.json │ │ ├── a28.imageset │ │ │ ├── a28.png │ │ │ └── Contents.json │ │ ├── a29.imageset │ │ │ ├── a29.png │ │ │ └── Contents.json │ │ ├── a3.imageset │ │ │ ├── a3.jpeg │ │ │ └── Contents.json │ │ ├── a31.imageset │ │ │ ├── a31.png │ │ │ └── Contents.json │ │ ├── a32.imageset │ │ │ ├── a32.png │ │ │ └── Contents.json │ │ ├── a33.imageset │ │ │ ├── a33.png │ │ │ └── Contents.json │ │ ├── a34.imageset │ │ │ ├── a34.png │ │ │ └── Contents.json │ │ ├── a35.imageset │ │ │ ├── a35.png │ │ │ └── Contents.json │ │ ├── a36.imageset │ │ │ ├── a36.png │ │ │ └── Contents.json │ │ ├── a37.imageset │ │ │ ├── a37.png │ │ │ └── Contents.json │ │ ├── a38.imageset │ │ │ ├── a38.png │ │ │ └── Contents.json │ │ ├── a39.imageset │ │ │ ├── a39.png │ │ │ └── Contents.json │ │ ├── a4.imageset │ │ │ ├── a4.png │ │ │ └── Contents.json │ │ ├── a40.imageset │ │ │ ├── a40.png │ │ │ └── Contents.json │ │ ├── a41.imageset │ │ │ ├── a41.png │ │ │ └── Contents.json │ │ ├── a42.imageset │ │ │ ├── a42.png │ │ │ └── Contents.json │ │ ├── a43.imageset │ │ │ ├── a43.png │ │ │ └── Contents.json │ │ ├── a44.imageset │ │ │ ├── a44.png │ │ │ └── Contents.json │ │ ├── a45.imageset │ │ │ ├── a45.png │ │ │ └── Contents.json │ │ ├── a46.imageset │ │ │ ├── a46.png │ │ │ └── Contents.json │ │ ├── a47.imageset │ │ │ ├── a47.png │ │ │ └── Contents.json │ │ ├── a5.imageset │ │ │ ├── a5.jpeg │ │ │ └── Contents.json │ │ ├── a50.imageset │ │ │ ├── a50.png │ │ │ └── Contents.json │ │ ├── a51.imageset │ │ │ ├── a51.png │ │ │ └── Contents.json │ │ ├── a52.imageset │ │ │ ├── a52.png │ │ │ └── Contents.json │ │ ├── a53.imageset │ │ │ ├── a53.png │ │ │ └── Contents.json │ │ ├── a54.imageset │ │ │ ├── a54.png │ │ │ └── Contents.json │ │ ├── a55.imageset │ │ │ ├── a55.png │ │ │ └── Contents.json │ │ ├── a56.imageset │ │ │ ├── a56.png │ │ │ └── Contents.json │ │ ├── a57.imageset │ │ │ ├── a57.png │ │ │ └── Contents.json │ │ ├── a6.imageset │ │ │ ├── a6.png │ │ │ └── Contents.json │ │ ├── a7.imageset │ │ │ ├── a7.jpeg │ │ │ └── Contents.json │ │ ├── a8.imageset │ │ │ ├── a8.png │ │ │ └── Contents.json │ │ ├── a9.imageset │ │ │ ├── a9.jpeg │ │ │ └── Contents.json │ │ ├── a11.imageset │ │ │ ├── a11.jpeg │ │ │ └── Contents.json │ │ ├── a13.imageset │ │ │ ├── a13.jpeg │ │ │ └── Contents.json │ │ ├── a30.imageset │ │ │ ├── a30.jpeg │ │ │ └── Contents.json │ │ ├── art.imageset │ │ │ ├── easel.png │ │ │ └── Contents.json │ │ ├── undo.imageset │ │ │ ├── undo.png │ │ │ └── Contents.json │ │ ├── clear.imageset │ │ │ ├── broom.png │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── iTunesArtwork@2x.png │ │ │ ├── Icon-App-20x20@2x-1.png │ │ │ ├── Icon-App-29x29@2x-1.png │ │ │ ├── Icon-App-40x40@2x-1.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ │ └── theme.imageset │ │ │ ├── change-theme-filled.png │ │ │ └── Contents.json │ └── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard ├── Controller │ ├── ChooseArtPopOverViewController.swift │ └── ViewController.swift ├── View │ ├── Choose Art │ │ ├── ChooseArtViewCell.swift │ │ ├── UIView+extensions.swift │ │ └── ChooseArtView.swift │ └── CanvasView.swift ├── Info.plist └── AppDelegate.swift ├── DrawingCanvas.xcodeproj ├── project.xcworkspace │ ├── xcshareddata │ │ └── WorkspaceSettings.xcsettings │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── a0l00wj.xcuserdatad │ │ └── WorkspaceSettings.xcsettings ├── xcshareddata │ └── xcschemes │ │ └── DrawingCanvas.xcscheme └── project.pbxproj ├── DrawingCanvasTests ├── Info.plist └── DrawingCanvasTests.swift └── README.md /DrawingCanvas/storyborads/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a0.imageset/a0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a0.imageset/a0.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a1.imageset/a1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a1.imageset/a1.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a10.imageset/a10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a10.imageset/a10.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a12.imageset/a12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a12.imageset/a12.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a14.imageset/a14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a14.imageset/a14.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a15.imageset/a15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a15.imageset/a15.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a16.imageset/a16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a16.imageset/a16.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a17.imageset/a17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a17.imageset/a17.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a18.imageset/a18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a18.imageset/a18.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a19.imageset/a19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a19.imageset/a19.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a2.imageset/a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a2.imageset/a2.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a20.imageset/a20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a20.imageset/a20.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a21.imageset/a21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a21.imageset/a21.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a22.imageset/a22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a22.imageset/a22.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a23.imageset/a23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a23.imageset/a23.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a24.imageset/a24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a24.imageset/a24.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a25.imageset/a25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a25.imageset/a25.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a26.imageset/a26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a26.imageset/a26.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a27.imageset/a27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a27.imageset/a27.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a28.imageset/a28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a28.imageset/a28.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a29.imageset/a29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a29.imageset/a29.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a3.imageset/a3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a3.imageset/a3.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a31.imageset/a31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a31.imageset/a31.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a32.imageset/a32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a32.imageset/a32.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a33.imageset/a33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a33.imageset/a33.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a34.imageset/a34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a34.imageset/a34.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a35.imageset/a35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a35.imageset/a35.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a36.imageset/a36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a36.imageset/a36.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a37.imageset/a37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a37.imageset/a37.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a38.imageset/a38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a38.imageset/a38.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a39.imageset/a39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a39.imageset/a39.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a4.imageset/a4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a4.imageset/a4.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a40.imageset/a40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a40.imageset/a40.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a41.imageset/a41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a41.imageset/a41.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a42.imageset/a42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a42.imageset/a42.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a43.imageset/a43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a43.imageset/a43.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a44.imageset/a44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a44.imageset/a44.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a45.imageset/a45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a45.imageset/a45.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a46.imageset/a46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a46.imageset/a46.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a47.imageset/a47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a47.imageset/a47.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a5.imageset/a5.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a5.imageset/a5.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a50.imageset/a50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a50.imageset/a50.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a51.imageset/a51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a51.imageset/a51.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a52.imageset/a52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a52.imageset/a52.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a53.imageset/a53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a53.imageset/a53.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a54.imageset/a54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a54.imageset/a54.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a55.imageset/a55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a55.imageset/a55.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a56.imageset/a56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a56.imageset/a56.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a57.imageset/a57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a57.imageset/a57.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a6.imageset/a6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a6.imageset/a6.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a7.imageset/a7.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a7.imageset/a7.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a8.imageset/a8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a8.imageset/a8.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a9.imageset/a9.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a9.imageset/a9.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a11.imageset/a11.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a11.imageset/a11.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a13.imageset/a13.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a13.imageset/a13.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a30.imageset/a30.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/a30.imageset/a30.jpeg -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/art.imageset/easel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/art.imageset/easel.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/undo.imageset/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/undo.imageset/undo.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/clear.imageset/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/clear.imageset/broom.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/theme.imageset/change-theme-filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/theme.imageset/change-theme-filled.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashislaha/DrawingCanvas/HEAD/DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /DrawingCanvas.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /DrawingCanvas.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a1.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a3.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a5.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a7.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a8.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a9.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a10.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a11.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a12.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a12.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a13.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a13.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a14.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a14.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a15.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a15.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a16.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a17.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a17.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a18.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a19.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a19.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a20.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a20.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a21.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a21.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a22.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a22.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a23.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a23.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a24.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a25.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a25.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a26.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a26.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a27.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a27.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a28.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a28.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a29.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a29.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a30.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a30.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a31.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a31.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a32.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a32.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a33.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a33.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a34.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a34.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a35.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a35.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a36.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a36.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a37.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a37.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a38.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a38.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a39.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a39.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a40.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a40.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a41.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a41.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a42.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a42.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a43.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a43.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a44.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a44.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a45.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a45.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a46.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a46.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a47.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a47.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a50.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a50.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a51.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a51.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a52.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a52.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a53.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a53.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a54.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a54.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a55.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a55.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a56.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a56.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/a57.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a57.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/art.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "easel.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/clear.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "broom.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/undo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "undo.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/theme.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "change-theme-filled.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /DrawingCanvas.xcodeproj/project.xcworkspace/xcuserdata/a0l00wj.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | EnabledFullIndexStoreVisibility 12 | 13 | IssueFilterStyle 14 | ShowActiveSchemeOnly 15 | LiveSourceIssuesEnabled 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /DrawingCanvas/Controller/ChooseArtPopOverViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChooseArtPopOverViewController.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 4/26/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ChooseArtPopOverViewController: UIViewController { 12 | 13 | public weak var delegate: ChooseArtViewDelegate? 14 | 15 | @IBOutlet weak var artView: ChooseArtView! { 16 | didSet { 17 | artView.delegate = self 18 | } 19 | } 20 | } 21 | 22 | extension ChooseArtPopOverViewController: ChooseArtViewDelegate { 23 | func chooseArt(_ image: UIImage) { 24 | delegate?.chooseArt(image) 25 | dismiss(animated: true, completion: nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /DrawingCanvasTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /DrawingCanvasTests/DrawingCanvasTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DrawingCanvasTests.swift 3 | // DrawingCanvasTests 4 | // 5 | // Created by Ashis Laha on 1/16/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import DrawingCanvas 11 | 12 | class DrawingCanvasTests: XCTestCase { 13 | 14 | override func setUp() { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /DrawingCanvas/View/Choose Art/ChooseArtViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChooseArtViewCell.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 4/26/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ChooseArtViewCell: UICollectionViewCell { 12 | 13 | public var image: UIImage? { 14 | didSet { 15 | imageVw.image = image 16 | } 17 | } 18 | 19 | // view loading 20 | override init(frame: CGRect) { 21 | super.init(frame: frame) 22 | viewSetup() 23 | } 24 | required init?(coder aDecoder: NSCoder) { 25 | super.init(coder: aDecoder) 26 | } 27 | 28 | // clean the collection view cell before reuse 29 | override func prepareForReuse() { 30 | imageVw.image = nil 31 | } 32 | 33 | public let imageVw: UIImageView = { 34 | let imageView = UIImageView() 35 | imageView.translatesAutoresizingMaskIntoConstraints = false // enable autolayout 36 | imageView.backgroundColor = .white 37 | imageView.contentMode = .scaleAspectFit 38 | return imageView 39 | }() 40 | 41 | // MARK: Layout Setup 42 | private func viewSetup() { 43 | addSubview(imageVw) 44 | backgroundColor = .white 45 | imageVw.anchors(top: topAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /DrawingCanvas/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.1 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DrawingCanvas 2 | 3 | Here we will learn how to create a drawing canvas where you can draw anything with different colors, different stoke 4 | width with couple of additional functionality like clear the canvas, undo the last operation, change the back-ground theme etc. 5 | 6 | It supports both iPhone and iPad with all orientation (portrait, landscape, upside down). 7 | 8 | As iPad and iPhone upper versions like iPhone X, XR,XS, 8 Plus have enough space to draw. It's more convenient to draw. 9 | 10 | # Outputs: 11 | 12 | ## ***************************** iPad: 13 | 14 | ![iphad-9](https://user-images.githubusercontent.com/10649284/56858291-39aa0c80-6995-11e9-9556-0395e0659f34.png) 15 | ![Simulator Screen Shot - iPad 2 - 2019-04-27 at 13 13 44 copy](https://user-images.githubusercontent.com/10649284/56858292-3a42a300-6995-11e9-9837-0b8f103a4972.png) 16 | ![Simulator Screen Shot - iPad 2 - 2019-04-27 at 13 14 15 copy](https://user-images.githubusercontent.com/10649284/56858293-3a42a300-6995-11e9-81db-f60d2ddef626.png) 17 | ![Simulator Screen Shot - iPad 2 - 2019-04-27 at 13 14 22 copy](https://user-images.githubusercontent.com/10649284/56858294-3adb3980-6995-11e9-979e-6e885d10f0ed.png) 18 | ![Simulator Screen Shot - iPad 2 - 2019-04-27 at 13 16 19 copy](https://user-images.githubusercontent.com/10649284/56858295-3adb3980-6995-11e9-852c-2a2c90aea3de.png) 19 | 20 | ## **************************** iPhone: 21 | ![simulator screen shot - iphone x - 2019-01-19 at 10 39 10](https://user-images.githubusercontent.com/10649284/51422670-964c9d00-1bd8-11e9-9404-3cbc241eda92.png) 22 | ![simulator screen shot - iphone x - 2019-01-19 at 10 39 14](https://user-images.githubusercontent.com/10649284/51422671-964c9d00-1bd8-11e9-8e2d-4710cafa1f63.png) 23 | ![simulator screen shot - iphone x - 2019-01-19 at 10 39 20](https://user-images.githubusercontent.com/10649284/51422672-96e53380-1bd8-11e9-8480-e54a1008f076.png) 24 | ![simulator screen shot - iphone x - 2019-01-19 at 10 57 47](https://user-images.githubusercontent.com/10649284/51422704-1a9f2000-1bd9-11e9-8e95-84e9be8a8480.png) 25 | 26 | 27 | ## Implementation: 28 | 29 | - use bezier path for drawing. 30 | -------------------------------------------------------------------------------- /DrawingCanvas/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 1/16/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /DrawingCanvas/View/CanvasView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CanvasView.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 1/16/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | struct Line { 12 | var points: [CGPoint] 13 | let strokeColor: UIColor 14 | let strokeWidth: CGFloat 15 | } 16 | 17 | class CanvasView: UIView { 18 | 19 | // private properties 20 | private var lines: [Line] = [] 21 | private var strokeColor: UIColor = .red 22 | private var strokeWidth: CGFloat = 5.0 23 | 24 | override func draw(_ rect: CGRect) { 25 | super.draw(rect) 26 | 27 | guard let context = UIGraphicsGetCurrentContext() else { return } 28 | 29 | for line in lines { 30 | context.setStrokeColor(line.strokeColor.cgColor) 31 | context.setLineWidth(line.strokeWidth) 32 | context.setLineCap(.round) 33 | 34 | for (index, point) in line.points.enumerated() { 35 | if index == 0 { // starting point 36 | context.move(to: point) 37 | } else { 38 | context.addLine(to: point) 39 | } 40 | } 41 | context.strokePath() 42 | } 43 | } 44 | 45 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 46 | 47 | guard let point = touches.first?.location(in: self) else { return } 48 | let newLine = Line(points: [point], strokeColor: strokeColor, strokeWidth: strokeWidth) 49 | lines.append(newLine) 50 | setNeedsDisplay() 51 | } 52 | 53 | override func touchesMoved(_ touches: Set, with event: UIEvent?) { 54 | 55 | // update the lines last item 56 | guard var lastLine = lines.popLast(), let point = touches.first?.location(in: self) else { return } 57 | lastLine.points.append(point) 58 | lines.append(lastLine) 59 | setNeedsDisplay() 60 | } 61 | 62 | // public functionlity 63 | public func setStrokeWidth(_ width: CGFloat) { 64 | strokeWidth = width 65 | } 66 | public func setStrokeColor(_ color: UIColor) { 67 | strokeColor = color 68 | } 69 | public func clearAll() { 70 | lines.removeAll() 71 | setNeedsDisplay() 72 | } 73 | public func undo() { 74 | guard !lines.isEmpty else { return } 75 | lines.removeLast() 76 | setNeedsDisplay() 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /DrawingCanvas/View/Choose Art/UIView+extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+extensions.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 4/26/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIView { 12 | 13 | func fillSuperView(padding: UIEdgeInsets = .zero) { // fill the super view entirely 14 | anchors(top: superview?.topAnchor, leading: superview?.leadingAnchor, bottom: superview?.bottomAnchor, trailing: superview?.trailingAnchor, padding: padding) 15 | } 16 | 17 | func anchorSize(to view: UIView) { // create the view exactly same as to view 18 | translatesAutoresizingMaskIntoConstraints = false 19 | widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 20 | heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 21 | } 22 | 23 | func anchors(top: NSLayoutYAxisAnchor? = nil, leading: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, trailing: NSLayoutXAxisAnchor? = nil, centerX: NSLayoutXAxisAnchor? = nil, centerXConstants: CGFloat = 0.0, centerY: NSLayoutYAxisAnchor? = nil, centerYConstants: CGFloat = 0.0, padding: UIEdgeInsets = .zero, size: CGSize = .zero) { 24 | 25 | // enable auto-layout for that view 26 | translatesAutoresizingMaskIntoConstraints = false 27 | if let top = top { 28 | topAnchor.constraint(equalTo: top, constant: padding.top).isActive = true 29 | } 30 | if let leading = leading { 31 | leadingAnchor.constraint(equalTo: leading, constant: padding.left).isActive = true 32 | } 33 | if let bottom = bottom { 34 | bottomAnchor.constraint(equalTo: bottom, constant: -padding.bottom).isActive = true 35 | } 36 | if let trailing = trailing { 37 | trailingAnchor.constraint(equalTo: trailing, constant: -padding.right).isActive = true 38 | } 39 | if size.height > 0 { 40 | heightAnchor.constraint(equalToConstant: size.height).isActive = true 41 | } 42 | if size.width > 0 { 43 | widthAnchor.constraint(equalToConstant: size.width).isActive = true 44 | } 45 | if let centerX = centerX { 46 | centerXAnchor.constraint(equalTo: centerX, constant: centerXConstants).isActive = true 47 | } 48 | if let centerY = centerY { 49 | centerYAnchor.constraint(equalTo: centerY, constant: centerYConstants).isActive = true 50 | } 51 | } 52 | } 53 | 54 | 55 | -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-40x40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-60x60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon-App-20x20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-29x29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@2x-1.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-40x40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-76x76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-83.5x83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "iTunesArtwork@2x.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /DrawingCanvas/View/Choose Art/ChooseArtView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChooseArtView.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 4/26/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol ChooseArtViewDelegate: class { 12 | func chooseArt(_ image: UIImage) 13 | } 14 | 15 | class ChooseArtView: UIView { 16 | 17 | private let cellId = "cellId" 18 | private var collectionView: UICollectionView! 19 | 20 | public weak var delegate: ChooseArtViewDelegate? 21 | public var photos: [UIImage] = [] { 22 | didSet { 23 | collectionView.reloadData() 24 | } 25 | } 26 | 27 | // MARK:- Init 28 | override init(frame: CGRect) { 29 | super.init(frame: frame) 30 | collectionViewSetUp() 31 | updatePhotos() 32 | } 33 | override func awakeFromNib() { 34 | super.awakeFromNib() 35 | collectionViewSetUp() 36 | updatePhotos() 37 | } 38 | required init?(coder aDecoder: NSCoder) { 39 | super.init(coder: aDecoder) 40 | } 41 | // MARK:- setup collectionView 42 | private func collectionViewSetUp() { 43 | let layout = UICollectionViewFlowLayout() 44 | layout.scrollDirection = .vertical 45 | collectionView = UICollectionView(frame: bounds, collectionViewLayout: layout) 46 | addSubview(collectionView) 47 | collectionView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 48 | collectionView.delegate = self 49 | collectionView.dataSource = self 50 | collectionView.register(ChooseArtViewCell.self, forCellWithReuseIdentifier: cellId) 51 | collectionView.backgroundColor = .clear 52 | collectionView.allowsSelection = true 53 | collectionView.isScrollEnabled = true 54 | } 55 | private func updatePhotos() { 56 | var images: [UIImage] = [] 57 | for i in 0...57 { 58 | if let image = UIImage(named: "a\(i)") { 59 | images.append(image) 60 | } 61 | } 62 | photos = images 63 | } 64 | } 65 | 66 | extension ChooseArtView: UICollectionViewDataSource { 67 | func numberOfSections(in collectionView: UICollectionView) -> Int { 68 | return 1 69 | } 70 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 71 | return photos.count 72 | } 73 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 74 | guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as? ChooseArtViewCell else { return UICollectionViewCell() } 75 | cell.image = photos[indexPath.row] 76 | return cell 77 | } 78 | } 79 | 80 | // MARK: UICollectionViewDelegate 81 | extension ChooseArtView: UICollectionViewDelegate { 82 | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 83 | delegate?.chooseArt(photos[indexPath.row]) 84 | } 85 | } 86 | 87 | // MARK: UICollectionViewDelegateFlowLayout 88 | extension ChooseArtView: UICollectionViewDelegateFlowLayout { 89 | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 90 | return CGSize(width: frame.width/3 - 6, height: frame.width/3 - 6) 91 | } 92 | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 93 | return 4 94 | } 95 | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 96 | return 4 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /DrawingCanvas.xcodeproj/xcshareddata/xcschemes/DrawingCanvas.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /DrawingCanvas/Controller/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // DrawingCanvas 4 | // 5 | // Created by Ashis Laha on 1/16/19. 6 | // Copyright © 2019 Ashis Laha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | private let colors: [UIColor] = [.red, .blue, .green, .yellow, .orange, .black, .darkGray, .white, .cyan, .magenta, .orange, .purple, .brown] 14 | 15 | @IBOutlet weak var topView: UIView! 16 | @IBOutlet weak var canvas: CanvasView! { 17 | didSet { 18 | canvas.backgroundColor = .clear 19 | } 20 | } 21 | @IBOutlet weak var colorsCollection: UICollectionView! { 22 | didSet { 23 | colorsCollection.delegate = self 24 | colorsCollection.dataSource = self 25 | } 26 | } 27 | @IBOutlet weak var colorsLabel: UILabel! 28 | 29 | // topview contains undo, clear and a slider 30 | // outlets 31 | @IBOutlet weak var lineWidthSlider: UISlider! 32 | @IBOutlet weak var clearOutlet: UIButton! { 33 | didSet { 34 | clearOutlet.layer.cornerRadius = 10 35 | } 36 | } 37 | @IBOutlet weak var undoOutlet: UIButton! { 38 | didSet { 39 | undoOutlet.layer.cornerRadius = 10 40 | } 41 | } 42 | @IBOutlet weak var themeOutlet: UIButton! { 43 | didSet { 44 | themeOutlet.layer.cornerRadius = 10 45 | } 46 | } 47 | 48 | @IBOutlet weak var artOutlet: UIButton! { 49 | didSet { 50 | artOutlet.layer.cornerRadius = 10 51 | } 52 | } 53 | 54 | // actions 55 | @IBAction func slide(_ sender: UISlider) { 56 | canvas.setStrokeWidth(CGFloat(sender.value)) 57 | } 58 | @IBAction func clearAll(_ sender: UIButton) { 59 | canvas.clearAll() 60 | for eachView in view.subviews where eachView is UIImageView { 61 | eachView.removeFromSuperview() 62 | } 63 | } 64 | @IBAction func undo(_ sender: UIButton) { 65 | canvas.undo() 66 | } 67 | @IBAction func theme(_ sender: UIButton) { 68 | let actionsheet = UIAlertController(title: "Choose Theme", message: "", preferredStyle: .actionSheet) 69 | 70 | let whiteThemeAction = UIAlertAction(title: "White Background", style: .default) { [weak self] (action) in 71 | self?.view.backgroundColor = .white 72 | } 73 | let blackThemeAction = UIAlertAction(title: "Black Background", style: .default) { [weak self] (action) in 74 | self?.view.backgroundColor = .black 75 | } 76 | actionsheet.addAction(whiteThemeAction) 77 | actionsheet.addAction(blackThemeAction) 78 | 79 | if let popoverVC = actionsheet.popoverPresentationController { // iPad 80 | popoverVC.sourceView = view 81 | popoverVC.sourceRect = CGRect(x: view.bounds.midX, y: view.bounds.midY, width: 0, height: 0) 82 | popoverVC.permittedArrowDirections = [] 83 | } 84 | present(actionsheet, animated: true, completion: nil) 85 | } 86 | 87 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 88 | if segue.identifier == "popover" { 89 | if let destinationVC = segue.destination as? ChooseArtPopOverViewController { 90 | destinationVC.delegate = self 91 | destinationVC.popoverPresentationController?.delegate = self 92 | destinationVC.preferredContentSize = CGSize(width: 320, height: 300) 93 | destinationVC.popoverPresentationController?.sourceRect = artOutlet.bounds 94 | } 95 | } 96 | } 97 | 98 | override func viewDidLoad() { 99 | super.viewDidLoad() 100 | 101 | view.backgroundColor = .white 102 | view.bringSubviewToFront(canvas) 103 | } 104 | } 105 | 106 | extension ViewController: UIPopoverPresentationControllerDelegate { 107 | func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 108 | return .none 109 | } 110 | } 111 | 112 | extension ViewController: UICollectionViewDelegate { 113 | func numberOfSections(in collectionView: UICollectionView) -> Int { 114 | return 1 115 | } 116 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 117 | return colors.count 118 | } 119 | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 120 | let color = colors[indexPath.row] 121 | canvas.setStrokeColor(color) 122 | colorsLabel.textColor = color 123 | } 124 | } 125 | 126 | extension ViewController: UICollectionViewDataSource { 127 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 128 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 129 | cell.backgroundColor = colors[indexPath.row] 130 | cell.layer.cornerRadius = cell.frame.width / 2 131 | return cell 132 | } 133 | } 134 | 135 | extension ViewController: UICollectionViewDelegateFlowLayout { 136 | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 137 | return CGSize(width: 50, height: 50) 138 | } 139 | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 140 | return 16 141 | } 142 | } 143 | 144 | extension ViewController: ChooseArtViewDelegate { 145 | func chooseArt(_ image: UIImage) { 146 | canvas.clearAll() 147 | for eachView in view.subviews where eachView is UIImageView { 148 | eachView.removeFromSuperview() 149 | } 150 | // add 151 | let imageView = UIImageView(image: image) 152 | imageView.isUserInteractionEnabled = true 153 | view.addSubview(imageView) 154 | imageView.frame = canvas.frame 155 | view.sendSubviewToBack(imageView) 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /DrawingCanvas/storyborads/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 40 | 50 | 60 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | -------------------------------------------------------------------------------- /DrawingCanvas.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | AD4C31EB21EF7AA600E51259 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C31EA21EF7AA600E51259 /* AppDelegate.swift */; }; 11 | AD4C31ED21EF7AA600E51259 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C31EC21EF7AA600E51259 /* ViewController.swift */; }; 12 | AD4C31F021EF7AA600E51259 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AD4C31EE21EF7AA600E51259 /* Main.storyboard */; }; 13 | AD4C31F221EF7AA600E51259 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AD4C31F121EF7AA600E51259 /* Assets.xcassets */; }; 14 | AD4C31F521EF7AA700E51259 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AD4C31F321EF7AA700E51259 /* LaunchScreen.storyboard */; }; 15 | AD4C320021EF7AA700E51259 /* DrawingCanvasTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C31FF21EF7AA700E51259 /* DrawingCanvasTests.swift */; }; 16 | AD4C320B21EF7AEA00E51259 /* CanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C320A21EF7AEA00E51259 /* CanvasView.swift */; }; 17 | AD7ACA9022734BF600E10602 /* ChooseArtView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7ACA8F22734BF600E10602 /* ChooseArtView.swift */; }; 18 | AD7ACA9222734F6E00E10602 /* ChooseArtViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7ACA9122734F6E00E10602 /* ChooseArtViewCell.swift */; }; 19 | AD7ACA9422734FF200E10602 /* UIView+extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7ACA9322734FF200E10602 /* UIView+extensions.swift */; }; 20 | AD7ACA972273559100E10602 /* ChooseArtPopOverViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7ACA962273559100E10602 /* ChooseArtPopOverViewController.swift */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXContainerItemProxy section */ 24 | AD4C31FC21EF7AA700E51259 /* PBXContainerItemProxy */ = { 25 | isa = PBXContainerItemProxy; 26 | containerPortal = AD4C31DF21EF7AA600E51259 /* Project object */; 27 | proxyType = 1; 28 | remoteGlobalIDString = AD4C31E621EF7AA600E51259; 29 | remoteInfo = DrawingCanvas; 30 | }; 31 | /* End PBXContainerItemProxy section */ 32 | 33 | /* Begin PBXFileReference section */ 34 | AD4C31E721EF7AA600E51259 /* DrawingCanvas.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DrawingCanvas.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | AD4C31EA21EF7AA600E51259 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | AD4C31EC21EF7AA600E51259 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 37 | AD4C31EF21EF7AA600E51259 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 38 | AD4C31F121EF7AA600E51259 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 39 | AD4C31F421EF7AA700E51259 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 40 | AD4C31F621EF7AA700E51259 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 41 | AD4C31FB21EF7AA700E51259 /* DrawingCanvasTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DrawingCanvasTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | AD4C31FF21EF7AA700E51259 /* DrawingCanvasTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrawingCanvasTests.swift; sourceTree = ""; }; 43 | AD4C320121EF7AA700E51259 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | AD4C320A21EF7AEA00E51259 /* CanvasView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CanvasView.swift; sourceTree = ""; }; 45 | AD7ACA8F22734BF600E10602 /* ChooseArtView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseArtView.swift; sourceTree = ""; }; 46 | AD7ACA9122734F6E00E10602 /* ChooseArtViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseArtViewCell.swift; sourceTree = ""; }; 47 | AD7ACA9322734FF200E10602 /* UIView+extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+extensions.swift"; sourceTree = ""; }; 48 | AD7ACA962273559100E10602 /* ChooseArtPopOverViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseArtPopOverViewController.swift; sourceTree = ""; }; 49 | /* End PBXFileReference section */ 50 | 51 | /* Begin PBXFrameworksBuildPhase section */ 52 | AD4C31E421EF7AA600E51259 /* Frameworks */ = { 53 | isa = PBXFrameworksBuildPhase; 54 | buildActionMask = 2147483647; 55 | files = ( 56 | ); 57 | runOnlyForDeploymentPostprocessing = 0; 58 | }; 59 | AD4C31F821EF7AA700E51259 /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | /* End PBXFrameworksBuildPhase section */ 67 | 68 | /* Begin PBXGroup section */ 69 | AD4C31DE21EF7AA600E51259 = { 70 | isa = PBXGroup; 71 | children = ( 72 | AD4C31E921EF7AA600E51259 /* DrawingCanvas */, 73 | AD4C31FE21EF7AA700E51259 /* DrawingCanvasTests */, 74 | AD4C31E821EF7AA600E51259 /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | AD4C31E821EF7AA600E51259 /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | AD4C31E721EF7AA600E51259 /* DrawingCanvas.app */, 82 | AD4C31FB21EF7AA700E51259 /* DrawingCanvasTests.xctest */, 83 | ); 84 | name = Products; 85 | sourceTree = ""; 86 | }; 87 | AD4C31E921EF7AA600E51259 /* DrawingCanvas */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | AD4C31EA21EF7AA600E51259 /* AppDelegate.swift */, 91 | ADF9DA7321F228B60015FB9A /* View */, 92 | ADF9DA7221F228AE0015FB9A /* Controller */, 93 | ADF9DA7121F228950015FB9A /* storyborads */, 94 | AD4C31F621EF7AA700E51259 /* Info.plist */, 95 | ); 96 | path = DrawingCanvas; 97 | sourceTree = ""; 98 | }; 99 | AD4C31FE21EF7AA700E51259 /* DrawingCanvasTests */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | AD4C31FF21EF7AA700E51259 /* DrawingCanvasTests.swift */, 103 | AD4C320121EF7AA700E51259 /* Info.plist */, 104 | ); 105 | path = DrawingCanvasTests; 106 | sourceTree = ""; 107 | }; 108 | AD7ACA952273556C00E10602 /* Choose Art */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | AD7ACA8F22734BF600E10602 /* ChooseArtView.swift */, 112 | AD7ACA9122734F6E00E10602 /* ChooseArtViewCell.swift */, 113 | AD7ACA9322734FF200E10602 /* UIView+extensions.swift */, 114 | ); 115 | path = "Choose Art"; 116 | sourceTree = ""; 117 | }; 118 | ADF9DA7121F228950015FB9A /* storyborads */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | AD4C31EE21EF7AA600E51259 /* Main.storyboard */, 122 | AD4C31F121EF7AA600E51259 /* Assets.xcassets */, 123 | AD4C31F321EF7AA700E51259 /* LaunchScreen.storyboard */, 124 | ); 125 | path = storyborads; 126 | sourceTree = ""; 127 | }; 128 | ADF9DA7221F228AE0015FB9A /* Controller */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | AD4C31EC21EF7AA600E51259 /* ViewController.swift */, 132 | AD7ACA962273559100E10602 /* ChooseArtPopOverViewController.swift */, 133 | ); 134 | path = Controller; 135 | sourceTree = ""; 136 | }; 137 | ADF9DA7321F228B60015FB9A /* View */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | AD4C320A21EF7AEA00E51259 /* CanvasView.swift */, 141 | AD7ACA952273556C00E10602 /* Choose Art */, 142 | ); 143 | path = View; 144 | sourceTree = ""; 145 | }; 146 | /* End PBXGroup section */ 147 | 148 | /* Begin PBXNativeTarget section */ 149 | AD4C31E621EF7AA600E51259 /* DrawingCanvas */ = { 150 | isa = PBXNativeTarget; 151 | buildConfigurationList = AD4C320421EF7AA700E51259 /* Build configuration list for PBXNativeTarget "DrawingCanvas" */; 152 | buildPhases = ( 153 | AD4C31E321EF7AA600E51259 /* Sources */, 154 | AD4C31E421EF7AA600E51259 /* Frameworks */, 155 | AD4C31E521EF7AA600E51259 /* Resources */, 156 | ); 157 | buildRules = ( 158 | ); 159 | dependencies = ( 160 | ); 161 | name = DrawingCanvas; 162 | productName = DrawingCanvas; 163 | productReference = AD4C31E721EF7AA600E51259 /* DrawingCanvas.app */; 164 | productType = "com.apple.product-type.application"; 165 | }; 166 | AD4C31FA21EF7AA700E51259 /* DrawingCanvasTests */ = { 167 | isa = PBXNativeTarget; 168 | buildConfigurationList = AD4C320721EF7AA700E51259 /* Build configuration list for PBXNativeTarget "DrawingCanvasTests" */; 169 | buildPhases = ( 170 | AD4C31F721EF7AA700E51259 /* Sources */, 171 | AD4C31F821EF7AA700E51259 /* Frameworks */, 172 | AD4C31F921EF7AA700E51259 /* Resources */, 173 | ); 174 | buildRules = ( 175 | ); 176 | dependencies = ( 177 | AD4C31FD21EF7AA700E51259 /* PBXTargetDependency */, 178 | ); 179 | name = DrawingCanvasTests; 180 | productName = DrawingCanvasTests; 181 | productReference = AD4C31FB21EF7AA700E51259 /* DrawingCanvasTests.xctest */; 182 | productType = "com.apple.product-type.bundle.unit-test"; 183 | }; 184 | /* End PBXNativeTarget section */ 185 | 186 | /* Begin PBXProject section */ 187 | AD4C31DF21EF7AA600E51259 /* Project object */ = { 188 | isa = PBXProject; 189 | attributes = { 190 | LastSwiftUpdateCheck = 1010; 191 | LastUpgradeCheck = 1010; 192 | ORGANIZATIONNAME = "Ashis Laha"; 193 | TargetAttributes = { 194 | AD4C31E621EF7AA600E51259 = { 195 | CreatedOnToolsVersion = 10.1; 196 | }; 197 | AD4C31FA21EF7AA700E51259 = { 198 | CreatedOnToolsVersion = 10.1; 199 | TestTargetID = AD4C31E621EF7AA600E51259; 200 | }; 201 | }; 202 | }; 203 | buildConfigurationList = AD4C31E221EF7AA600E51259 /* Build configuration list for PBXProject "DrawingCanvas" */; 204 | compatibilityVersion = "Xcode 9.3"; 205 | developmentRegion = en; 206 | hasScannedForEncodings = 0; 207 | knownRegions = ( 208 | en, 209 | Base, 210 | ); 211 | mainGroup = AD4C31DE21EF7AA600E51259; 212 | productRefGroup = AD4C31E821EF7AA600E51259 /* Products */; 213 | projectDirPath = ""; 214 | projectRoot = ""; 215 | targets = ( 216 | AD4C31E621EF7AA600E51259 /* DrawingCanvas */, 217 | AD4C31FA21EF7AA700E51259 /* DrawingCanvasTests */, 218 | ); 219 | }; 220 | /* End PBXProject section */ 221 | 222 | /* Begin PBXResourcesBuildPhase section */ 223 | AD4C31E521EF7AA600E51259 /* Resources */ = { 224 | isa = PBXResourcesBuildPhase; 225 | buildActionMask = 2147483647; 226 | files = ( 227 | AD4C31F521EF7AA700E51259 /* LaunchScreen.storyboard in Resources */, 228 | AD4C31F221EF7AA600E51259 /* Assets.xcassets in Resources */, 229 | AD4C31F021EF7AA600E51259 /* Main.storyboard in Resources */, 230 | ); 231 | runOnlyForDeploymentPostprocessing = 0; 232 | }; 233 | AD4C31F921EF7AA700E51259 /* Resources */ = { 234 | isa = PBXResourcesBuildPhase; 235 | buildActionMask = 2147483647; 236 | files = ( 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | }; 240 | /* End PBXResourcesBuildPhase section */ 241 | 242 | /* Begin PBXSourcesBuildPhase section */ 243 | AD4C31E321EF7AA600E51259 /* Sources */ = { 244 | isa = PBXSourcesBuildPhase; 245 | buildActionMask = 2147483647; 246 | files = ( 247 | AD7ACA9422734FF200E10602 /* UIView+extensions.swift in Sources */, 248 | AD7ACA9222734F6E00E10602 /* ChooseArtViewCell.swift in Sources */, 249 | AD4C31ED21EF7AA600E51259 /* ViewController.swift in Sources */, 250 | AD7ACA9022734BF600E10602 /* ChooseArtView.swift in Sources */, 251 | AD4C31EB21EF7AA600E51259 /* AppDelegate.swift in Sources */, 252 | AD7ACA972273559100E10602 /* ChooseArtPopOverViewController.swift in Sources */, 253 | AD4C320B21EF7AEA00E51259 /* CanvasView.swift in Sources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | AD4C31F721EF7AA700E51259 /* Sources */ = { 258 | isa = PBXSourcesBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | AD4C320021EF7AA700E51259 /* DrawingCanvasTests.swift in Sources */, 262 | ); 263 | runOnlyForDeploymentPostprocessing = 0; 264 | }; 265 | /* End PBXSourcesBuildPhase section */ 266 | 267 | /* Begin PBXTargetDependency section */ 268 | AD4C31FD21EF7AA700E51259 /* PBXTargetDependency */ = { 269 | isa = PBXTargetDependency; 270 | target = AD4C31E621EF7AA600E51259 /* DrawingCanvas */; 271 | targetProxy = AD4C31FC21EF7AA700E51259 /* PBXContainerItemProxy */; 272 | }; 273 | /* End PBXTargetDependency section */ 274 | 275 | /* Begin PBXVariantGroup section */ 276 | AD4C31EE21EF7AA600E51259 /* Main.storyboard */ = { 277 | isa = PBXVariantGroup; 278 | children = ( 279 | AD4C31EF21EF7AA600E51259 /* Base */, 280 | ); 281 | name = Main.storyboard; 282 | sourceTree = ""; 283 | }; 284 | AD4C31F321EF7AA700E51259 /* LaunchScreen.storyboard */ = { 285 | isa = PBXVariantGroup; 286 | children = ( 287 | AD4C31F421EF7AA700E51259 /* Base */, 288 | ); 289 | name = LaunchScreen.storyboard; 290 | sourceTree = ""; 291 | }; 292 | /* End PBXVariantGroup section */ 293 | 294 | /* Begin XCBuildConfiguration section */ 295 | AD4C320221EF7AA700E51259 /* Debug */ = { 296 | isa = XCBuildConfiguration; 297 | buildSettings = { 298 | ALWAYS_SEARCH_USER_PATHS = NO; 299 | CLANG_ANALYZER_NONNULL = YES; 300 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 301 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 302 | CLANG_CXX_LIBRARY = "libc++"; 303 | CLANG_ENABLE_MODULES = YES; 304 | CLANG_ENABLE_OBJC_ARC = YES; 305 | CLANG_ENABLE_OBJC_WEAK = YES; 306 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 307 | CLANG_WARN_BOOL_CONVERSION = YES; 308 | CLANG_WARN_COMMA = YES; 309 | CLANG_WARN_CONSTANT_CONVERSION = YES; 310 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 311 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 312 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 313 | CLANG_WARN_EMPTY_BODY = YES; 314 | CLANG_WARN_ENUM_CONVERSION = YES; 315 | CLANG_WARN_INFINITE_RECURSION = YES; 316 | CLANG_WARN_INT_CONVERSION = YES; 317 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 318 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 319 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 320 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 321 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 322 | CLANG_WARN_STRICT_PROTOTYPES = YES; 323 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 324 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 325 | CLANG_WARN_UNREACHABLE_CODE = YES; 326 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 327 | CODE_SIGN_IDENTITY = "iPhone Developer"; 328 | COPY_PHASE_STRIP = NO; 329 | DEBUG_INFORMATION_FORMAT = dwarf; 330 | ENABLE_STRICT_OBJC_MSGSEND = YES; 331 | ENABLE_TESTABILITY = YES; 332 | GCC_C_LANGUAGE_STANDARD = gnu11; 333 | GCC_DYNAMIC_NO_PIC = NO; 334 | GCC_NO_COMMON_BLOCKS = YES; 335 | GCC_OPTIMIZATION_LEVEL = 0; 336 | GCC_PREPROCESSOR_DEFINITIONS = ( 337 | "DEBUG=1", 338 | "$(inherited)", 339 | ); 340 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 341 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 342 | GCC_WARN_UNDECLARED_SELECTOR = YES; 343 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 344 | GCC_WARN_UNUSED_FUNCTION = YES; 345 | GCC_WARN_UNUSED_VARIABLE = YES; 346 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 347 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 348 | MTL_FAST_MATH = YES; 349 | ONLY_ACTIVE_ARCH = YES; 350 | SDKROOT = iphoneos; 351 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 352 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 353 | }; 354 | name = Debug; 355 | }; 356 | AD4C320321EF7AA700E51259 /* Release */ = { 357 | isa = XCBuildConfiguration; 358 | buildSettings = { 359 | ALWAYS_SEARCH_USER_PATHS = NO; 360 | CLANG_ANALYZER_NONNULL = YES; 361 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 362 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 363 | CLANG_CXX_LIBRARY = "libc++"; 364 | CLANG_ENABLE_MODULES = YES; 365 | CLANG_ENABLE_OBJC_ARC = YES; 366 | CLANG_ENABLE_OBJC_WEAK = YES; 367 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 368 | CLANG_WARN_BOOL_CONVERSION = YES; 369 | CLANG_WARN_COMMA = YES; 370 | CLANG_WARN_CONSTANT_CONVERSION = YES; 371 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 372 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 373 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 374 | CLANG_WARN_EMPTY_BODY = YES; 375 | CLANG_WARN_ENUM_CONVERSION = YES; 376 | CLANG_WARN_INFINITE_RECURSION = YES; 377 | CLANG_WARN_INT_CONVERSION = YES; 378 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 379 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 380 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 381 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 382 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 383 | CLANG_WARN_STRICT_PROTOTYPES = YES; 384 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 385 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 386 | CLANG_WARN_UNREACHABLE_CODE = YES; 387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 388 | CODE_SIGN_IDENTITY = "iPhone Developer"; 389 | COPY_PHASE_STRIP = NO; 390 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 391 | ENABLE_NS_ASSERTIONS = NO; 392 | ENABLE_STRICT_OBJC_MSGSEND = YES; 393 | GCC_C_LANGUAGE_STANDARD = gnu11; 394 | GCC_NO_COMMON_BLOCKS = YES; 395 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 396 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 397 | GCC_WARN_UNDECLARED_SELECTOR = YES; 398 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 399 | GCC_WARN_UNUSED_FUNCTION = YES; 400 | GCC_WARN_UNUSED_VARIABLE = YES; 401 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 402 | MTL_ENABLE_DEBUG_INFO = NO; 403 | MTL_FAST_MATH = YES; 404 | SDKROOT = iphoneos; 405 | SWIFT_COMPILATION_MODE = wholemodule; 406 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 407 | VALIDATE_PRODUCT = YES; 408 | }; 409 | name = Release; 410 | }; 411 | AD4C320521EF7AA700E51259 /* Debug */ = { 412 | isa = XCBuildConfiguration; 413 | buildSettings = { 414 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 415 | CODE_SIGN_IDENTITY = "iPhone Developer"; 416 | CODE_SIGN_STYLE = Automatic; 417 | DEVELOPMENT_TEAM = W3Z9URG96M; 418 | INFOPLIST_FILE = DrawingCanvas/Info.plist; 419 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 420 | LD_RUNPATH_SEARCH_PATHS = ( 421 | "$(inherited)", 422 | "@executable_path/Frameworks", 423 | ); 424 | PRODUCT_BUNDLE_IDENTIFIER = com.ashislaha.DrawingCanvas; 425 | PRODUCT_NAME = "$(TARGET_NAME)"; 426 | PROVISIONING_PROFILE_SPECIFIER = ""; 427 | SWIFT_VERSION = 4.2; 428 | TARGETED_DEVICE_FAMILY = "1,2"; 429 | }; 430 | name = Debug; 431 | }; 432 | AD4C320621EF7AA700E51259 /* Release */ = { 433 | isa = XCBuildConfiguration; 434 | buildSettings = { 435 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 436 | CODE_SIGN_IDENTITY = "iPhone Developer"; 437 | CODE_SIGN_STYLE = Automatic; 438 | DEVELOPMENT_TEAM = W3Z9URG96M; 439 | INFOPLIST_FILE = DrawingCanvas/Info.plist; 440 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 441 | LD_RUNPATH_SEARCH_PATHS = ( 442 | "$(inherited)", 443 | "@executable_path/Frameworks", 444 | ); 445 | PRODUCT_BUNDLE_IDENTIFIER = com.ashislaha.DrawingCanvas; 446 | PRODUCT_NAME = "$(TARGET_NAME)"; 447 | PROVISIONING_PROFILE_SPECIFIER = ""; 448 | SWIFT_VERSION = 4.2; 449 | TARGETED_DEVICE_FAMILY = "1,2"; 450 | }; 451 | name = Release; 452 | }; 453 | AD4C320821EF7AA700E51259 /* Debug */ = { 454 | isa = XCBuildConfiguration; 455 | buildSettings = { 456 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 457 | BUNDLE_LOADER = "$(TEST_HOST)"; 458 | CODE_SIGN_STYLE = Automatic; 459 | DEVELOPMENT_TEAM = W3Z9URG96M; 460 | INFOPLIST_FILE = DrawingCanvasTests/Info.plist; 461 | LD_RUNPATH_SEARCH_PATHS = ( 462 | "$(inherited)", 463 | "@executable_path/Frameworks", 464 | "@loader_path/Frameworks", 465 | ); 466 | PRODUCT_BUNDLE_IDENTIFIER = com.ashislaha.DrawingCanvasTests; 467 | PRODUCT_NAME = "$(TARGET_NAME)"; 468 | SWIFT_VERSION = 4.2; 469 | TARGETED_DEVICE_FAMILY = "1,2"; 470 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DrawingCanvas.app/DrawingCanvas"; 471 | }; 472 | name = Debug; 473 | }; 474 | AD4C320921EF7AA700E51259 /* Release */ = { 475 | isa = XCBuildConfiguration; 476 | buildSettings = { 477 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 478 | BUNDLE_LOADER = "$(TEST_HOST)"; 479 | CODE_SIGN_STYLE = Automatic; 480 | DEVELOPMENT_TEAM = W3Z9URG96M; 481 | INFOPLIST_FILE = DrawingCanvasTests/Info.plist; 482 | LD_RUNPATH_SEARCH_PATHS = ( 483 | "$(inherited)", 484 | "@executable_path/Frameworks", 485 | "@loader_path/Frameworks", 486 | ); 487 | PRODUCT_BUNDLE_IDENTIFIER = com.ashislaha.DrawingCanvasTests; 488 | PRODUCT_NAME = "$(TARGET_NAME)"; 489 | SWIFT_VERSION = 4.2; 490 | TARGETED_DEVICE_FAMILY = "1,2"; 491 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DrawingCanvas.app/DrawingCanvas"; 492 | }; 493 | name = Release; 494 | }; 495 | /* End XCBuildConfiguration section */ 496 | 497 | /* Begin XCConfigurationList section */ 498 | AD4C31E221EF7AA600E51259 /* Build configuration list for PBXProject "DrawingCanvas" */ = { 499 | isa = XCConfigurationList; 500 | buildConfigurations = ( 501 | AD4C320221EF7AA700E51259 /* Debug */, 502 | AD4C320321EF7AA700E51259 /* Release */, 503 | ); 504 | defaultConfigurationIsVisible = 0; 505 | defaultConfigurationName = Release; 506 | }; 507 | AD4C320421EF7AA700E51259 /* Build configuration list for PBXNativeTarget "DrawingCanvas" */ = { 508 | isa = XCConfigurationList; 509 | buildConfigurations = ( 510 | AD4C320521EF7AA700E51259 /* Debug */, 511 | AD4C320621EF7AA700E51259 /* Release */, 512 | ); 513 | defaultConfigurationIsVisible = 0; 514 | defaultConfigurationName = Release; 515 | }; 516 | AD4C320721EF7AA700E51259 /* Build configuration list for PBXNativeTarget "DrawingCanvasTests" */ = { 517 | isa = XCConfigurationList; 518 | buildConfigurations = ( 519 | AD4C320821EF7AA700E51259 /* Debug */, 520 | AD4C320921EF7AA700E51259 /* Release */, 521 | ); 522 | defaultConfigurationIsVisible = 0; 523 | defaultConfigurationName = Release; 524 | }; 525 | /* End XCConfigurationList section */ 526 | }; 527 | rootObject = AD4C31DF21EF7AA600E51259 /* Project object */; 528 | } 529 | --------------------------------------------------------------------------------