Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

phjo

macrumors regular
Original poster
Jan 8, 2008
149
1
Hi,

Although it is far from being complete, I put online a pre-release of the plotting framework I am writing for objective-c (targetted at 10.4 and 10.5 osx).

There is almost no documentation yet, but the behavior is easy to understand from reading the headers.

Any comment is welcome, in this thread or by emailing me.

You'll find it there : http://www.mpkju.fr/~graphview

phjo
 
Hey, this might be useful for me, I will give it a try and let you know what I think.

Thank you for sharing.
Jesus Cruz
 
Please do !

Some documentation (class tree) has now been added,

phjo
 
Wow this is wierd just today I have been looking for a Graphing framework and you release on yesterday...

THANKS!
 
Wow this is wierd just today I have been looking for a Graphing framework and you release on yesterday...

THANKS!

You're welcome,

I warn you though, it is a work in progress, and under active development. As it is not yet a couple of weeks old, it might change quite a bit in the near future, beginning with the names of methods that do not conform to cocoa guidelines... (I am a beginner in cocoa programming and learning a lot in the process...)

Names of classes and some instance variables are not definitive either, as I intend to get rid here or there of some abbreviations.

Maybe PHxAxis, PHyAxis will be renamed PHHorizontalAxis and PHVerticalAxis in the same process.

So be prepared for some changes in the near future...

Please report your experience with this framework, here or through email, as can be found in the project website.

phjo
 
will this lib work on iPhone?

I have absolutely no idea... But nothing prevents you from trying to build it for the iphone...

Some new changes today : the code has been cleaned up a bit, fixed a bug or two, and changed the mouse event handling to make it closer to cocoa guidelines.

So a right click (or command+left click) now shows a contextual menu with the possibility to copy to the pasteboard in tiff, eps or pdf formats. A zoom out is performed with option+right click.

phjo
 
Three new classes (GraphObjects) for axis drawing inside the view, lines, and plotting real valued functions graphs have been added. New screenshots, examples are at the same location.

phjo
 
Hi,

Although it is far from being complete, I put online a pre-release of the plotting framework I am writing for objective-c (targetted at 10.4 and 10.5 osx).

There is almost no documentation yet, but the behavior is easy to understand from reading the headers.

Any comment is welcome, in this thread or by emailing me.

You'll find it there : http://www.mpkju.fr/~graphview

phjo

That is nice. Something for scientists. I am also working (on and off) on a plotting library for scientific use, so I am quite interested :)
What kind of license is it under? I didn't find anything about it. (EDIT: it's under the download section.)
--
edit:

"PHOverlayWindow.?" is unfortunately missing in the xcode project.
I have a few questions and remarks, if I may.

Suppose you have a list of plots (each plot having multiple objects that are plotted) in an selectable NSTableView lets say. Whatever the user selects is shown on the screen. How would your code or you handle that? Replace the view with a new view or simply erase the old plot and redraw the new plot on screen. I think this question is important as in to where you store variables such as minimum and maximum axis values or plot labels. Is it stored within the framework, or is it something a delegate or datasource has to handle and the framework merely asks for it (which is my approach btw).

The graphobjects you plot are not optional, it seems. That is a plot can not be defined and the display of it can be toggled on or off (toggling between on and off is a very important option I would say).

What is the range of values your code can handle? The latest problem I ran into was representing decimals as floats.

How does CG compare to the cocoa drawing functions? Are they much faster, or more complicated?
 
Licence is for now MIT, although I didn't do that much thinking about that yet, I just wanted something fair and not restrictive. It could change (as many other things) in the future, but I wouldn't go all the way to a strict GPL licence I guess.

The MIT licence is one of the downloads.

And Kainjow is of course right, I was not very imaginative with the initials of the classes...

As you tackled writing a plotting framework as well, MrFusion, I'm quite interested with your suggestions for the development of this framework...

In a few days or rather weeks, I'll try to choose a repositery on line (google code ? sourceforge ?) and of course, if some developers want to be part of the project at one point, the help will be quite welcome.

The next step though would be to have a mailing-list to discuss development (not only bug reports of course, but new features, UI, naming, design decisions...)

phjo
 
Licence is for now MIT, although I didn't do that much thinking about that yet, I just wanted something fair and not restrictive. It could change (as many other things) in the future, but I wouldn't go all the way to a strict GPL licence I guess.

The MIT licence is one of the downloads.

Yes, I found it just now. Sorry about that.

And Kainjow is of course right, I was not very imaginative with the initials of the classes...

I do the same. But it works, doesn't it. :)

As you tackled writing a plotting framework as well, MrFusion, I'm quite interested with your suggestions for the development of this framework...

Now that I know the license of your code, I am more than happy to share my "code" with you. What would be the best way?

In a few days or rather weeks, I'll try to choose a repositery on line (google code ? sourceforge ?) and of course, if some developers want to be part of the project at one point, the help will be quite welcome.
Sure, I'll join. But be warned, I am a self taught programmer. My code might not be up to your standards, but I am certain I can help in a some way. :)
The next step though would be to have a mailing-list to discuss development (not only bug reports of course, but new features, UI, naming, design decisions...)
phjo

Sounds good.
 
You were right, MrFusion, about the PHOverlayWindow... I have no idea what happened actually. I've uploaded I hope this time the entire project. Bug me if not.

As concerns drawing or not an object, adding a flag for that would be nothing at all, and meanwhile it could be done, but it is a bit tedious while removing adding back the object to the array of objects to be drawn.

if it is an important improvement, I'll gladly add the very few lines necessary... (In PHGraphObject implementation of course)

As for changing the entire plot, I am not sure what the best approach would be yet, but I think a tabless NSTabView could do the trick ?

there is no label yet, but it is planned and my approach would be to include them in the graph objects themselves (not the view).

And finally, if you are interested in taking part in this project, first thing would be to send me an email so that I don't lose track of you, and as soon as it has a mailing list I can inform you (or even enlist you without further warning !)

phjo
 
As concerns drawing or not an object, adding a flag for that would be nothing at all, and meanwhile it could be done, but it is a bit tedious while removing adding back the object to the array of objects to be drawn.

if it is an important improvement, I'll gladly add the very few lines necessary... (In PHGraphObject implementation of course)

Nah, don't bother. Do it when you have some spare time. I know it's only a few lines and can easily do it myself. It was just something you shouldn't forget. Maybe I will add when you get that repository running. :)

As for changing the entire plot, I am not sure what the best approach would be yet, but I think a tabless NSTabView could do the trick ?

No it wouldn't, I am afraid. Not for me at least. For example, one 15 minute experiment gives me roughly 4000 plots of raw data. One of the reason I started coding myself.
 
No it wouldn't, I am afraid. Not for me at least. For example, one 15 minute experiment gives me roughly 4000 plots of raw data. One of the reason I started coding myself.

Then maybe the best way would be to add accessors to the three arrays defining the content of a PHGraphView, and switching plots would just mean changing the arrays and display the view. That would be very fast, and with a low memory footprint.

phjo
 
Then maybe the best way would be to add accessors to the three arrays defining the content of a PHGraphView, and switching plots would just mean changing the arrays and display the view. That would be very fast, and with a low memory footprint.

phjo

I appreciate your concern for a low memory footprint. :) I can't wait for the new iMac (Apple when are going to update it) to replace my mini, because I want to play around with the instruments etc.

As to your suggestion. Speaking from a user point of view. A plot is much more that simply data. It can also have different axis ranges, different number of graphobjects, different labels, different colors for the graphobjects, different legend, etc.

To illustrate, my list of delegate and datasource functions is longer than my list of actual plot routines. Maybe that is just a sign of bad design, I don't know. I do know that it al depends on how much customisability you want to give to user, on how complex the plotting is. Making all the choices for the user is easier, let the user decides every minute detail can be long and tedious work. In contrast, for example making the code decides the best interval for the tics can be hard to do for a wide range of possible values, as you might have noticed. However it is easier to just leave it to the user, although once again you get a long list of delegate functions.

Anyway, your code looks much better than my and the result is already nice. It's a good start I would say.

PS. I hope you got my email.
 
As to your suggestion. Speaking from a user point of view. A plot is much more that simply data. It can also have different axis ranges, different number of graphobjects, different labels, different colors for the graphobjects, different legend, etc.

I am aware of that, and this is exactly what I meant with the PHGraphView content, which is not that big because graph objects only keep references to their data.

To illustrate, my list of delegate and datasource functions is longer than my list of actual plot routines. Maybe that is just a sign of bad design, I don't know. I do know that it al depends on how much customisability you want to give to user, on how complex the plotting is.

Customisability always comes at a price, but my approach is to try adding whatever customisation is suitable while keeping reasonable defaults, enabling users getting graphs in not so many lines of code.

Making all the choices for the user is easier, let the user decides every minute detail can be long and tedious work. In contrast, for example making the code decides the best interval for the tics can be hard to do for a wide range of possible values, as you might have noticed. However it is easier to just leave it to the user, although once again you get a long list of delegate functions.

The algorithm I used there for tickmarks is quite simple, but will need some refinement later on. (Especially as concerns the tick values, which could overlap in some cases.)

User defined tickmarks is now possible as well (although mostly will be ignored for logarithmic scales, whose implementation as regards tick marks is very preliminary...)

phjo
 
A new object (parametric curve) has been added, along with the creation of a mailing list.

I urge you to subscribe to that list so that :
- you can guide the project for it to be suitable for as many users as possible (you don't have to contribute a line of code for that, but if you want to code, that will soon be possible too...)
- I don't have to speak to myself, and getting bored

phjo
 
Porting to iPhone

I too would like to port this graphing library to iPhone but I don't know how to build a framework specifically for that.

Has anyone else done this?

Thanks!
 
I too would like to port this graphing library to iPhone but I don't know how to build a framework specifically for that.

Has anyone else done this?

Thanks!

You can't use third party frameworks on the iPhone. The only way to do it would be to include all the relevant files from the framework in your project directly. Just make sure you are not violating the license of the framework first though.
 
I too would like to port this graphing library to iPhone but I don't know how to build a framework specifically for that.

Has anyone else done this?

Thanks!

Well, my applications TouchPlot and TouchPlotLite (see http://www.mpkju.fr/~touchplot ) use part of this framework, quite substantially modified though.

The licence (bsd like) allows it.

As for frameworks in the iPhone, it would probably be possible to embed a framework in the application bundle but it might not be allowed then for appstore distribution.

So what Cromulent suggests is safer and easier too, and is what I did myself.

I will probably, sooner or later, pull back some of the changes I made coding touchplot to my graphing framework, but it is at the moment far down in my to do list.

phjo
 
Thanks for the prompts reply!

I started porting the code over last night. I just added a new group to my project and then added the files to that. I'm also using TouchXML so I set it up similar to that.

I replaced the cocoa.h with

Code:
#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE)
#import <uikit/uikit.h>
#define NSColor UIColor
#define NSRect CGRect
#define NSSize CGSize
#else
#import <cocoa/cocoa.h>
#endif

But I'm still getting plenty of warnings and errors that I need to sort out. I'm new to iPhone but have plenty of .net and RoR experience. I'm finding it a little tricky to find out what the equivalents for the iPhone are.

/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxis.m: In function '-[PHAxis setColor:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxis.m:47: error: 'NSForegroundColorAttributeName' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxis.m:47: error: (Each undeclared identifier is reported only once
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxis.m:47: error: for each function it appears in.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxis.m:47: error: 'NSForegroundColorAttributeName' undeclared (first use in this function)

/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m: In function '-[PHAxisSystem drawWithContext:rect:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: will be assumed to return 'id' and accept
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: '...' as arguments.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:93: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:96: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:153: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:153: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:156: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:159: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:90: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:93: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:96: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:153: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:153: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:156: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHAxisSystem.m:159: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'

In file included from /Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.m:9:
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:54: error: syntax error before 'NSTrackingRectTag'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:57: error: syntax error before 'NSMenu'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:59: fatal error: method definition not in @implementation context
compilation terminated.
{standard input}:32:FATAL:.abort detected. Assembly stopping.
In file included from /Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.m:9:
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:54: error: syntax error before 'NSTrackingRectTag'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:57: error: syntax error before 'NSMenu'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHGraphView.h:59: fatal error: method definition not in @implementation context

In file included from /Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:9:
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.h:19: error: cannot find interface declaration for 'NSWindow', superclass of 'PHOverlayWindow'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m: In function '-[PHOverlayWindow initWithContentRect:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: 'NSWindow' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: (Each undeclared identifier is reported only once
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: for each function it appears in.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: 'borderlessWindow' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: 'NSBorderlessWindowMask' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: 'NSBackingStoreBuffered' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: no super class declared in @interface for 'PHOverlayWindow'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:17: error: 'NSStatusWindowLevel' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:21: warning: control reaches end of non-void function
In file included from /Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:9:
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.h:19: error: cannot find interface declaration for 'NSWindow', superclass of 'PHOverlayWindow'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: 'NSWindow' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:14: error: 'borderlessWindow' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: 'NSBorderlessWindowMask' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: 'NSBackingStoreBuffered' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:15: error: no super class declared in @interface for 'PHOverlayWindow'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:17: error: 'NSStatusWindowLevel' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHOverlayWindow.m:21: warning: control reaches end of non-void function

/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m: In function '-[PHVectorField drawWithContext:rect:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: 'NSBezierPath' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: (Each undeclared identifier is reported only once
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: for each function it appears in.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: 'aPath' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: 'UIColor' may not respond to '+colorWithCalibratedRed:green:blue:alpha:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: will be assumed to return 'id' and accept
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: '...' as arguments.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: 'NSBezierPath' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:74: error: 'aPath' undeclared (first use in this function)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: 'UIColor' may not respond to '+colorWithCalibratedRed:green:blue:alpha:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHVectorField.m:128: warning: (Messages without a matching method signature

/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m: In function '-[PHxAxis drawWithContext:rect:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: will be assumed to return 'id' and accept
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: '...' as arguments.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:62: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:65: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:94: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:94: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:97: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:100: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:59: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:62: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:65: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:94: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:94: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:97: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHxAxis.m:100: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'

/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m: In function '-[PHyAxis drawWithContext:rect:]':
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: will be assumed to return 'id' and accept
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: '...' as arguments.)
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:63: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:66: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:94: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:94: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:97: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:100: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: warning: (Messages without a matching method signature
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:60: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:63: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:66: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:94: warning: 'NSString' may not respond to '-boundingRectWithSize:eek:ptions:attributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:94: error: invalid initializer
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:97: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
/Users/brian/Documents/iPhoneApps/SkinnyPhone/PHyAxis.m:100: warning: 'NSString' may not respond to '-drawAtPoint:withAttributes:'
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.