Re: NSAffineTransform on iOS
Re: NSAffineTransform on iOS
- Subject: Re: NSAffineTransform on iOS
- From: Dave DeLong <email@hidden>
- Date: Mon, 09 Apr 2012 08:02:54 -0700
I think the major source of confusion is that NSAffineTransform is an object, and CGAffineTransform is not; it's a struct. This is really important. :)
> CGAffineTransform transform;
> CGAffineTransformTranslate(transform, CGRectGetMidX(tileFrame), CGRectGetMidY(tileFrame));
The first line declares a CGAffineTransform struct, but doesn't initialize it, which means it contains garbage values.
The second line takes a garbage affine transform, attempts to translate it, and then ignores the return value.
The result is that your call to CGContextConcatCTM is being passed a garbage CGAffineTransform.
What you're probably look for is this:
> CGAffineTransform transform = CGAffineTransformIdentity;
> transform = CGAffineTransformTranslate(transform, CGRectGetMidX(tileFrame), CGRectGetMidY(tileFrame));
Or more tersely:
> CGAffineTransform transform = CGAffineTransformMakeTranslation(CGRectGetMidX(tileFrame), CGRectGetMidY(tileFrame));
HTH,
Dave
On Apr 9, 2012, at 7:55 AM, Pascal Harris wrote:
> I'm trying to write some code for iOS and Wow! I didn't expect it to be so unfamiliar. Kind of like walking into a familiar city, like London, and discovering that everyone is speaking Dutch and no one speaks English. Weird. I'm slowly getting to grips with the differences and similarities - but I'm a bit perplexed by transforms. As I say, I'm writing a tile based game and the following code works very nicely in Mac OS X:
>
> NSGraphicsContext *context = [NSGraphicsContext currentContext];
> [context saveGraphicsState];
>
> id transform = [NSAffineTransform transform];
> [transform translateXBy:NSMidX(tileFrame) yBy:NSMidY(tileFrame)];
> [transform concat];
>
> [self drawTile:tileFrame];
>
> [context restoreGraphicsState];
>
>
> Unfortunately, my iOS version doesn't work. That isn't to say that it crashes - it just doesn't produce the expected output.
>
> CGContextRef context = UIGraphicsGetCurrentContext();
> CGContextSaveGState(context);
>
> CGAffineTransform transform;
> CGAffineTransformTranslate(transform, CGRectGetMidX(tileFrame), CGRectGetMidY(tileFrame));
> CGContextConcatCTM(context, transform);
>
> [self drawTile:tileFrame];
>
> CGContextRestoreGState(context);
>
> I'm sure that my error will be obvious to anyone who isn't a complete newb, but I am - so it isn't obvious to me!
>
> And are there any books that you'd recommend that cover these kind of issues, books to assist a Mac OS X developer write for iOS?
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden