cs193p – Project #3 Assignment #3 Extra Task #4

Please note, this blog entry is from a previous course. You might want to check out the current one.

Upon rotation (or any bounds change), maintain the origin of your graph with respect to the center of your graphing view rather than with respect to the upper left corner.

The easy way would be to define the origin not relative to the left top corner, but to the center … But then our API would be different to the axis drawer, and if somebody already would have been using our API we would break their code …
Continue reading “cs193p – Project #3 Assignment #3 Extra Task #4”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #3 Assignment #3 Extra Task #3

Please note, this blog entry is from a previous course. You might want to check out the current one.

Preserve origin and scale between launchings of the application. Where should this be done to best respect MVC, do you think?

The easy way would be in the graph view, but that would not respect MVC … Let’s put it in the graph view controller. The only problem is how to know when the origin and scale of the graph view have changed. While can set them easily because they are public variables, we currently have observation mechanism outside the graph-view class. We could add delegation methods to its data-source protocol or better create a delegation protocol …
Continue reading “cs193p – Project #3 Assignment #3 Extra Task #3”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #3 Assignment #3 Extra Task #2

Please note, this blog entry is from a previous course. You might want to check out the current one.

Use the information you found above to improve panning performance. Do NOT turn your code into a mess to do this. Your solution should be simple and elegant. There is a strong temptation when optimizing to sacrifice readability or to violate MVC boundaries, but you are NOT allowed to do that for this Extra Credit!

… not drawing the axis would not really help that much. Drawing using lower resolution would not really look that nice. Caching data would violate our MVC boundaries, even if that’s debatable …

Let’s go for the last solution, we create a snapshot of the current graph:

    var snapshot:UIView?

Continue reading “cs193p – Project #3 Assignment #3 Extra Task #2”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #3 Assignment #3 Extra Task #1

Please note, this blog entry is from a previous course. You might want to check out the current one.

Figure out how to use Instruments to analyze the performance of panning and pinching in your graphing view. What makes dragging the graph around so sluggish? Explain in comments in your code what you found and what you might do about it.

Instead of running the app profile ⌘I it and choose the time profiler. Press the record button, create a graph in the app and start panning and pinching, and finally stop the profiler.
Continue reading “cs193p – Project #3 Assignment #3 Extra Task #1”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #3 Assignment #3 Task #11

Please note, this blog entry is from a previous course. You might want to check out the current one.

Your graphing view must support the following three gestures:
a. Pinching (zooms the entire graph, including the axes, in or out on the graph)
b. Panning (moves the entire graph, including the axes, to follow the touch around)
c. Double-tapping (moves the origin of the graph to the point of the double tap)


Let’s start by implement the handlers in the graph view class. Pinching zooms the view, thus we have to change the scale of the view:

    func zoom(gesture: UIPinchGestureRecognizer) {
        if gesture.state == .Changed {
            scale *= gesture.scale
            gesture.scale = 1.0
        }
    }

Continue reading “cs193p – Project #3 Assignment #3 Task #11”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail