Adding an animated, modal popup view - objective-c

I'd like to create a view that appears scrolling in from the bottom (on iPad) and sits centered, modally over the currently open view, something like this ...
What would be the straightforward (and recommended) way to do this when developing apps for iOS7 and up? Is it a matter of simply instantiating the view controller class and adding it as a child or are there any better methods to do this, that include automatically managed modality and animation (like for example when adding an UIPopoverViewController)?

Related

Animate view and set button backgroundimage conflict

I am making a type of drawer animation for iOS where a button tap in one of my views will expand that view over the other views from the bottom up. All is well, except when I want to change the button image after animation. The animation completes but then returns the view to its original position when setting the button image.
Things I have tried:
Using CGAffineTransformMakeTranslation instead of setCenter; this works perfectly, except I want to also add a panGestureRecognizer to interact with the drawer, present, and dismiss it. The transform doesn't seem to play well with this interaction
Adding the buttons programmatically thinking maybe AutoLayout is fussing with this
UIView beginAnimations as well as UIView animateWithDuration and completion block
Setting breakpoints and verifying that the movement of the view is reflected in the frame of the button before the image is changed; button frame is not still in original position, but has supposedly relocated with the view
It shouldn't matter, but my project is using TabBarController. I made a simpler version of what I'm trying to do with just the one view controller and had the same issue. The green view extends beyond the frame of the view controller's view so that when it moves up it reveals what is off-screen.
example: http://i.imgur.com/tRou0Js.png?1

Adapting between two different UIPresentationController's

I would like to adapt between two different UIPresentationController, according to the current trait collection. For example, the two controllers could be UIPopoverPresentationController for any traits and a custom UIPresentationController for compact horizontal traits (e.g. iPhone).
Unfortunately this doesn't seem possible in the latest iOS 8. In particular:
You can set a UIAdaptivePresentationControllerDelegate to swap out the presentation style, but only permits the standard full screen presentation controller.
You can choose which presentation controller to use just before presenting the view controller, but this doesn't actually adapt after presenting when the traits collection changes e.g. in iPad multitasking or orientation change.
A couple of different attempts at a solution: Tumblr, Irace
Any suggestions?
To assume you require two presentation controllers for adaptation is a false assumption.
There is only one presentation controller and you have to adapt the view and/or the transition using the delegate methods. For the custom transition you simply set a transition delegate class on the view controller you return from viewControllerForAdaptivePresentationStyle which in my case was a navigation controller with a transparent dimmed view with table at bottom and done button in the right nav item. My custom transition moves the table up from the bottom, while dimming and resizing the dimmed view, and fading in the nav bar. If you would like to see the behaviour yourself run Maps and tap the bottom right info button and try it on iPhone and iPad, I've copied that exactly. Here are screenshots of compact and regular:

UI Tab Bar added to Storyboard not showing up when I build the App

I have an iOS App. I currently have an existing View Controller. I manually added a UI Tab Bar to it using the storyboard.
I added the UITabBarDelegate and implemented the corresponding functions required tabBar:tabBar didSelectItem:item.
I've also connected the delegate of the Tab Bar to the view controller itself.
However, when I build, the Tab Bar completely does not show up at all.
I know you can just use a Tab Bar Controller, but I need to add the Tab Bar to it, and use the Tab Bar to modify content of the view itself. (specifically it acts as a filter for a table view) So, it doesnt make sense to create 4 exact same Views to hook up to a UI Tab View Controller
What am I doing wrong?
I found out what's wrong.
It turns out, I had completely successfully implemented the UITabBar. What happened was that I was testing on an IPhone 4. As such, it bled out of the screen and could not be seen. Adding constraints fixed it.

XCode: Best Way To Handle A New View In A Tabbed Application

In an iOS Tabbed Application I'm making, I've got tabs to load different viewControllers, which is pretty standard. What I'd like to do is make a few buttons (with images on them) load up another view with the button image maximized to the screen. However, I'm not really sure how to go about doing this. I don't want a new tab for this, I just want another view to show the full image, and then a button to return to the tabbed view. I've experimented a bit with making a subview to do this, and I've attempted to change the main viewport to the new view, with no success. If someone could point me in the right direction, and maybe give me a solid concept as a jumping-off point, I would really appreciate it.
And to clarify, I'm not looking for "the best way", per se. I'd be willing to accept a quick and dirty fix. But if you know of more than one way to handle this situation, I would appreciate whichever one you personally think is better.
I would do it by creating a UINavigationController to use as the primary tab view. When you want to show the full screen button, you create a new UIViewController subclass (below) and push it. That class will return YES for the method "hidesBottomBar" (its something like that).
This new view controller will be a traditional controller. You can create a UIImageView to fill the view (or you can probably replace the view with the imageView). In the viewDidLoad you'll set the UIImage of the view (or you can enter its name in the nib).
When someone clicks on the button, then you'll pop that view and return to your tabbed view (where the tab bar is showing).
I did something like this (not a big button), so I know the tab bar can be made to hide on the push. You can also hide the navigation bar so it never is even show (again, not 100% sure at the moment how to do it but its possible).

Autoresizing different between ios 4.x and 5.0

Been trying to figure out why this happens for a few days.
My app is supposed to have a shared view between all screens that handles navigation. So I made a nib for the navigation with a few buttons on it and added that view to the window (which I'm told is a bad choice)
This global view stores 4 navigation controllers so that users can swap between them without losing their place (much like how a tab bar works). But it looks as if adding the view to the window has affected the way my app resizes for the in-call status bar. In 5.0 the entire app works perfectly, but in 4.0 it's completely wrong.
On 4.0 if I enable the in-call bar on a screen it will not move at all.
If I push a view controller with the in-call bar the navigation bar appears at the top, but the view appears 20 pixels lower than it should
And if I have the in-call bar enabled, push a screen, then go back, the navigation bar moves down 20 pixels (as it should), but the view stays where it is and is clipped by the navigation bar.
What is happening on iOS 5 that isn't happening on iOS 4.x that makes these changes? the app is all buggy on 4.3.
Create a "dummy" view controller (UINavigationController works well). Then add your view to that. Without using a view controller hierarchy events will not be propagated correctly.
I suspect this works on iOS 5 because of the new "container" view controller system. They have moved the system to be more lenient in these areas. I can't give a more specific answer than that without seeing your entire app navigation design.
EDIT:
Also try using the wantsFullScreenLayout property. It may help.