27

I am working on a notification system in my iPhone game and want an image to pop up on the screen and automatically fade after 2 seconds.

  1. User clicks a button that calls the method "popupImage"
  2. An image appears on the screen in a designated spot, it doesn't need to fade in
  3. The image fades out by itself after being on the screen for 2 seconds.

Is there any way of doing this? Thanks ahead of time.

felix_xiao
  • 1,608
  • 5
  • 21
  • 29

4 Answers4

57

Use UIView dedicated methods for that.

So imagine you already have your UIImageView ready, already created and added to the main view, but simply hidden. Your method simply need to make it visible, and start an animation 2 seconds later to fade it out, by animating its "alpha" property from 1.0 to 0.0 (during a 0.5s animation):

-(IBAction)popupImage
{
    imageView.hidden = NO;
    imageView.alpha = 1.0f;
    // Then fades it away after 2 seconds (the cross-fade animation will take 0.5s)
    [UIView animateWithDuration:0.5 delay:2.0 options:0 animations:^{
         // Animate the alpha value of your imageView from 1.0 to 0.0 here
         imageView.alpha = 0.0f;
     } completion:^(BOOL finished) {
         // Once the animation is completed and the alpha has gone to 0.0, hide the view for good
         imageView.hidden = YES;
     }];
}

Simple as that!

AliSoftware
  • 32,623
  • 6
  • 82
  • 77
  • 1
    Unless you set the alpha level to 1 again after the view disappears, you won't be able to do this again. – Horatio May 22 '16 at 01:35
12

Swift 2

self.overlay.hidden = false
UIView.animateWithDuration(2, delay: 5, options: UIViewAnimationOptions.TransitionFlipFromTop, animations: {
    self.overlay.alpha = 0
}, completion: { finished in
    self.overlay.hidden = true
})

Swift 3, 4, 5

self.overlay.isHidden = false
UIView.animate(withDuration: 2, delay: 5, options: UIView.AnimationOptions.transitionFlipFromTop, animations: {
    self.overlay.alpha = 0
}, completion: { finished in
    self.overlay.isHidden = true
})

Where overlay is the outlet for my image.

Karen Hovhannisyan
  • 1,140
  • 2
  • 21
  • 31
Joseph Selvaraj
  • 2,225
  • 1
  • 21
  • 21
3

Swift 3 version of @AliSoftware's answer

imageView.isHidden = false
imageView.alpha = 1.0

UIView.animate(withDuration: 0.5, delay: 2.0, options: [], animations: {

            self.imageView.alpha = 0.0

        }) { (finished: Bool) in

            self.imageView.isHidden = true
        }
iUser
  • 1,075
  • 3
  • 20
  • 49
0

Yes there is. Take a look at UIView block based animation here. And google for an example.

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations

You can also start a timer

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
ohr
  • 1,717
  • 14
  • 15