cs193p – Lecture #2 – More Xcode and Swift, MVC

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

Lecture #2 continues with the demonstration from the previous lecture showing:

  • how to use arrays,
  • computed properties,
  • the conditional statement switch,
  • functions as types,
  • various combinations of closure syntax defining functions “on the fly”,
  • method overloading – same method name, different arguments,
  • and more Autolayout.

Continue reading “cs193p – Lecture #2 – More Xcode and Swift, MVC”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Lecture #1 – Logistics, iOS8 Overview

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

Like every year lecture #1 is an general introduction of the course with an overview about iOS, MVC and this time the Swift.

… and again Paul Hegarty stresses the importance of being familiar with object oriented programming as prerequisites for the course and that it is not for absolute beginners.
Continue reading “cs193p – Lecture #1 – Logistics, iOS8 Overview”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

Lecture #9: Table Views

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

Lecture nine is named “9. Table Views (October 25, 2011)” and can be found at iTunes. Its slides are available at Stanford.

The theoretical part starts with table views which allow to display static or dynamic lists of data in different styles. A table consists of a header, a footer and table cells possible divided in sections (also with a header and a footer). A cell can be of type subtitle, basic, right and left detail, as well as completely customized.
Continue reading “Lecture #9: Table Views”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

Assignment #3 Extra Task #3

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

Improve the performance of panning. To do this, you need to try to understand where the CPU cycles are going when the graph is drawn. Is it our inefficient runProgram:usingVariableValues: method? Or is it all the Core Graphics calls we are making each time? Is there a simple way to reduce calls to both of these things in our drawRect:? Or is the performance issue something else entirely? If you are very brave, you can try to figure out how to use the Time Profiler (hold down Run in Xcode and pick Profile, then choose the Time Profiler from the dialog that appears). That’s the way to really know where the time’s going.

Time Profiler shows that runProgram: takes about of 80% of the processing time when pinching or panning. To know when we are actually pinching or panning we add a new private property which will be set as long as a gesture has not finished:
Continue reading “Assignment #3 Extra Task #3”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

Assignment #3 Extra Task #2

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

If you do Extra Credit #1, you’ll notice that some functions (like sin(x)) look so much nicer using the “line to” strategy (at least when zoomed in appropriately). Try dragging a UISwitch into your user-interface which lets the user switch back and forth between “dot mode” and “line to” mode drawing.

Add a new property to our graph view protocol:

@property (nonatomic) BOOL drawDots; // YES: draw dots; NO: draw lines

Continue reading “Assignment #3 Extra Task #2”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

Assignment #3 Extra Task #1

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

In the Hints section it is noted that you are allowed to draw your graph by drawing a line from each point to the next point. Clearly if your function were discontinuous (e.g. 1/x) or if you had zoomed out so far that drawing a line between points would be jumping over a lot of changes in y, this would give misleading results to the user. The best thing would probably be to simply draw dots at each coordinate you calculate. This would not help much with the zoomed-out-too-far problem, but it would certainly be more accurate on discontinuous functions. It is up to you to figure out how to draw a dot at a point with Core Graphics.

For the mandatory tasks we connected the dots of every calculated point. Now we must draws, where there is no such drawing function in iOS, thus we draw small rectangles:

CGContextFillRect(context, 
    CGRectMake([self xPointFromPixel:xPixel inRect:area] - 0.5, 
    [self yPointFromValue:y inRect:area originAtPoint:origin scale:scale] - 0.5, 1.0 , 1.0)
);
FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail