I'm trying to create an effect on the iPhone to scroll text across the view in a given location. Not really sure how to go about it so I did some experimenting. Af first I tried to animate the scroll using a timer. That gave me inconsistent movement; the velocity of the scrolling text appeared to be non-constant. Then I remembered that CoreAnimation is really supposed to take care of this kind of animation for you so I switch to trying to get it to manage the timing for me. I must be doing it all wrong because I cannot control the velocity of the scrolling text.
I expect my whole approach is probably wrong and am hoping that one of you has a better approach or suggestions as to how to fix it. I haven't found much in the way of CAScrollView documentation or examples to help. I've included the code below. Hopefully the length will not be an issue. // // ScrollingMarqueeViewController.m // ScrollingMarquee // // Created by Michael A. Crawford on 3/11/10. // Copyright Crawford Design Engineering, LLC 2010. All rights reserved. // #import <QuartzCore/QuartzCore.h> #import "ScrollingMarqueeViewController.h" @implementation ScrollingMarqueeViewController @synthesize scrollLabel; - (CALayer*)textLayer { scrollLabel.text = @"this is a long line of text that should be too long for " @"the screen width of this label."; return scrollLabel.layer; } - (CAScrollLayer*)scrollLayer { CAScrollLayer* layer = [CAScrollLayer layer]; [layer addSublayer:[self textLayer]]; return layer; } - (void)timerFireMethod:(NSTimer*)theTimer { #if 0 // Here I was using a periodic timer to animate the scroll. I noticed that // the animation wasn't smooth and then remembered that CA is supposed to do // the animating for me. So, I switched to trying the code below but that // doesn't work either. I'm really just grasping at straws here. static CGPoint origin = {0.0f, 0.0f}; origin.x += 5.0f; [scrollLayer scrollToPoint:origin]; #else CGContextRef context = UIGraphicsGetCurrentContext(); [UIView beginAnimations:nil context:context]; [UIView setAnimationDuration:5.0]; [scrollLayer scrollToPoint:CGPointMake(320.0f, 0.0f)]; [UIView commitAnimations]; #endif } - (void)viewDidLoad { [super viewDidLoad]; // create the scroll layer and add it to our view scrollLayer = [self scrollLayer]; [self.view.layer addSublayer:scrollLayer]; // make it the same size as our label scrollLayer.bounds = scrollLabel.frame; // position it in the middle of the view scrollLayer.position = CGPointMake(320.0f * 0.5f, 480.0f * 0.5f); // scroll the text horizontally scrollLayer.scrollMode = kCAScrollHorizontally; // use a timer to make the scroll happen scrollTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:/*YES*/NO]; } @end _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com