Jeffory Smith
Jeffory Smith

Reputation: 33

How to move an image with a button?

I have an image(clubcow.png) that is passed from an nsarray string to make a picture. Then facedowncow represents the picture. I was wondering how to make a button that will move facedowncow to position (100,100) when button is tapped. Any tips will be appreciated. Also, there is more to this code, I just posted the important parts to give an idea on what is going on.

cardKeys = [[NSArray alloc] initWithObjects:@"clubcow",  nil];
currentName = [NSMutableString stringWithFormat:@"%@.png", [cowsShuffled objectAtIndex:currentcow]];
faceDowncow = (UIImageView *)[self.view viewWithTag:1];
faceDowncow.userInteractionEnabled = YES;

Upvotes: 0

Views: 203

Answers (2)

johngraham
johngraham

Reputation: 6490

I would start by creating a UIButton and adding it to your view controller's view.

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(0, 0, 100, 20);
[button setTitle:@"Tap Me" forState:UIControlStateNormal];
[button addTarget:self action:@selector(animateImage:)
 forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

Then, link this button to a function that will animate your faceDowncow object. You could add your faceDowncow as a property of the view controller so the following function can easily reference it:

- (void)animateImage:(UIButton *)sender {
    [UIView animateWithDuration:0.2
     animations:^{
         // change origin of frame
         faceDowncow.frame = CGRectMake(100, 100, faceDowncow.frame.size.width, faceDowncow.frame.size.height);
     } completion:^(BOOL finished){
         // do something after animation
     }];
}

Upvotes: 4

Metabble
Metabble

Reputation: 11841

First of all, it looks like this code is from a view controller subclass, and the cow is a subview. In that case, you should probably have a property for it rather than obtaining it by its tag all the time. If it's instantiated in a storyboard scene/nib then you can hook up an outlet to a property/ivar in your subclass fairly easily.

The easiest way to do what you want is to create the button and use target action so that when it is tapped, it calls a method in your view controller. In the method body, obtain a reference to your cow and set it's frame property, like so:

[faceDowncow setFrame: CGRectMake(100,100,faceDowncow.bounds.size.width,faceDowncow.bounds.size.height)];

If you don't know how target action works, I suggest reading Apple's documentation on the matter. It's as simple as getting a button, calling one method to tell it what events should make a certain method get called, and then implementing that method.

Upvotes: 1

Related Questions