Aetharius
Aetharius

Reputation: 29

Objective C iPhone programming a dot or shape to follow your cursor

How would I create a program so a dot starts in the center, and when I click the screen the dot follows where I clicked? Not as in teleports to it, I mean like changes it's coordinates towards it slightly every click. I get how I could do it in theory, as in like

if (mouseIsClicked) { 

    [mouseX moveX];
    [mouseY moveY];

}

And make the class that mouseX and mouseY are have some methods to move closer to where the mouse is, but I just don't know any specifics to actually make it happen. Heck, I don't even know how to generate a dot in the first place! None of those guides are helping at all. I really want to learn this language though. I've been sitting at my mac messing around trying to get anything to work, but nothing's working anywhere near how I want it to.

Thanks for helping a total newbie like me.

Upvotes: 0

Views: 177

Answers (3)

Ryan Poolos
Ryan Poolos

Reputation: 18551

You can download the sample code here that will show you general iOS gestures. In particular it has a sample that shows how to drag and drop UIViews or how to swipe them around. The sample code includes both driven and fire-n-forget animations. Check it out, its commented and I'd be happy to answer any specific questions you have after reviewing the code.

Generating a simple circle

// Above Implementation
#import <QuartzCore/QuartzCore.h>

// In viewDidLoad or somewhere
UIView *circleView = [[UIView alloc] initWithFrame:CGRectMake(32.0, 32.0, 64.0, 64.0)];
[circleView setBackgroundColor:[UIColor redColor]];
[circleView.layer setCornerRadius:32.0];
self.view addSubview:circleView];

Upvotes: 0

Pierre Houston
Pierre Houston

Reputation: 1641

You can create a dot and move it around based on taps all within your UIViewController subclass.

Make your dot by creating a UIView configured to draw the way you want - look into CALayer and setting dotview.layer.cornerRadius to make it be round (alternately you can make a UIView subclass that overrides drawRect: to make the right CoreGraphics calls to draw what you want). Set dotview.center to position it.

Create a UITapGestureRecognizer with an action method in your view controller that updates dotview.center as desired. If you want it animated, simply set the property within a view animation call & animation block like this:

[UIView animateWithDuration:0.3 animations:^{
    dotview.center = newposition;
}];

Upvotes: 1

Josue Espinosa
Josue Espinosa

Reputation: 5089

If you are going to subclass UIView, you can use the touchesBegan/touchesMoved/touchesEnded methods to accomplish this. Something like:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
        //slightly update location of your object with p.x and p.y cgpoints
    [self setNeedsDisplay];
}

-(void)drawRect{
        //draw your object with updated coordinates
}

Upvotes: 1

Related Questions