I'm building an iOS 6 iPhone app in Xcode 4.6 and am wondering about the best way to achieve the following type of popup window:
Specifically, the iPhone screenshot on the right, where, if a user taps on a face or UIView in the main window, a partially transparent popover appears with more detailed information -- such as a portrait photo and textual data -- but the original view (a photo collection here) remains visible, and the timers/counters continue ticking down in that view.
I thought this would be a possible solution iPhone Modal View Smaller that the screen but it doesn't work for me. Not shown above is a cancel button that I am also planning to put in the popover, so that the user can return to the view underneath. When the timer expires, the detailed view also disappears.
Should I use presentModalViewController and the presenter/presented scheme, or use a parent-child-view relationship with a storyboard segue, or should I use loadNibNamed, or some kind of hack to overcome the iPhone's limitation of displaying a non-full-screen modal view? It'll cover most of the screen but I want to make sure the view underneath is visible and still active, since it provides information to the user that isn't in the popover (timer, etc.). The user won't need to interact with the screen below, but I'd like it to be partially visible.
I designed the popup view as a separate viewcontroller in my main storyboard, not as a xib file. The connections and outlets are formed from interface builder to my code, called ProfileViewController.
WARNING: My terminology may be incorrect and inaccurate. The popup or popover can be a UIView, UIViewController, UIWindow, or whatever works best programatically to solve the problem. I'm not tied to it being a certain widget type, as long as the functionality mirrors what I'm seeking.
Thanks in advance for your suggestions!
do you want to achieve this?
Here are two different viewControllers
one above other one. vc2
is a childViewController
of vc1
with a transparent
background. In your case you can put a UILabel
top of the stack with backgroundColor
black
and alpha = 0.5
.
All events of vc2
will fire on vc2.m
. Use this code on image click:
- (IBAction)imageClick
{
vc2 *viewController = [[vc2 alloc]init];
[self addChildViewController:viewController];
viewController.view.frame = self.view.frame;
[self.view addSubview:viewController.view];
viewController.view.alpha = 0;
[viewController didMoveToParentViewController:self];
[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^
{
viewController.view.alpha = 1;
}
completion:nil];
}
And in vc2.m
put this on viewDidLoad
to make this viewController
transparent.
self.view.backgroundColor = [UIColor clearColor];
self.view.opaque = YES;
Making transparent view a viewController
will make your code clean as all code of vc2
will be in a separate class.
EDIT
So do one thing, First add a UIView
to your xib
which will be a rounded border and frame will be that you want as per your screenshot.
For rounded border, you can use this category
. backgroundColor
of this UIView
will be clearColor
:
- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color
{
CALayer * l = [self layer];
[l setMasksToBounds:YES];
[l setCornerRadius:radius];
// You can even add a border
[l setBorderWidth:borderWidth];
[l setBorderColor:[color CGColor]];
}
Now put a UILabel/UIView/UIImage
whose frame is equal to UIView
above and alpha is 0.5 with black background color. You can do this directly from xib
. No need to set frame through code.
Then start putting your other controls inside UIView
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With