├── 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 | 
15 | 
16 | 
17 | 
18 | 
19 |
20 | ## **************************** iPhone:
21 | 
22 | 
23 | 
24 | 
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 |
--------------------------------------------------------------------------------