iPhone: Create a single UIView from multiple clicks

Posted by Cuzog on Stack Overflow See other posts from Stack Overflow or by Cuzog
Published on 2010-06-04T17:35:30Z Indexed on 2010/06/05 16:02 UTC
Read the original article Hit count: 215

Filed under:
|
|
|
|

I'm making a partial overlay modal in my app with the code from “Semi-Modal (Transparent) Dialogs on the iPhone” at ramin.firoozye.com. In doing so, the button that calls the modal is still visible and clickable. I will hide this button when the modal spawns, but I want to be sure if the user clicks very quickly twice, a new modal doesn't come up for each click. What is the best way to check that the modal doesn't already exist when calling it from the button click?

You can download the test project here. For those that don't have xcode, the relevant functions are below:

I call forth the modal on button click with this:

- (IBAction)displayModal:(id)sender {
    ModalViewController *modalController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];
    modalController.view.frame = CGRectOffset(modalController.view.frame, 0, 230);
    [self showModal:modalController.view];
}

Then use this function to animate the custom modal over the current view:

- (void)showModal:(UIView*) modalView {
    UIWindow* mainWindow = (((TestAppDelegate*) [UIApplication sharedApplication].delegate).window);

    CGPoint middleCenter = modalView.center;
    CGSize offSize = [UIScreen mainScreen].bounds.size;
    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    modalView.center = offScreenCenter; // we start off-screen
    [mainWindow addSubview:modalView];

    // Show it with a transition effect
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.4]; // animation duration in seconds
    modalView.center = middleCenter;
    [UIView commitAnimations];
}

Then I dismiss the modal on button click with this:

- (IBAction)dismissModal:(id)sender {
    [self hideModal:self.view];
}

And then use these functions to animate the modal offscreen and clean itself up:

- (void)hideModal:(UIView*) modalView {
    CGSize offSize = [UIScreen mainScreen].bounds.size;
    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    [UIView beginAnimations:nil context:modalView];
    [UIView setAnimationDuration:0.7];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hideModalEnded:finished:context:)];
    modalView.center = offScreenCenter;
    [UIView commitAnimations];
}

- (void)hideModalEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    UIView* modalView = (UIView *)context;
    [modalView removeFromSuperview];
    [self release];
}

Any help is greatly appreciated!

© Stack Overflow or respective owner

Related posts about iphone

Related posts about cocoa-touch