I have inherited an iOS app that has not been maintained since iOS 3 era. The app relies on a web view to display some data. One of the feature is displaying the video in a full screen mode. What the client needs is a video reacting to the device rotation but all other views should be only portrait.
I've managed to figure out all the window.rootViewController and shouldAutorotate changes. I get the app to rotate only when I want. The problem I am facing is the video rotation 'too much'.
If I rotate the device left, the video rotates by 180 degrees (it goes into upside down orientation). Rotating back to the right causes the view width to shrink by half but the orientation is correct. I am not quite sure where the problem could be.
Anyone had similar issues?
I did have the same problem by inheriting a project. In my case, the application is navigation based, and the problem was that the main UINavigationController's view was being added as a subview of an UIViewController's view.
So, initially I had this code on my application:didFinishLaunchingWithOptions::
self.viewController = [[MyViewController alloc] init];
self.window.rootViewController = self.viewController;
and this on MyViewController's viewDidLoad:
UINavigationController *navController = [[UINavigationController alloc] init];
[self.view addSubview:navController.view];
Then I simply changed my application:didFinishLaunchingWithOptions: to this:
self.viewController = [[MyViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = self.navigationController;
I hope this helps you!
Related
How to add UINavigationController to xCode Tab Bar Application Delegate?
My structure is based on xCode Tab Bar Application Delegate, with 2 tabs, First View & Second View respectively. For First View, I added a UITableView. I just want to make use of UINavigationController function [self.navigationController pushViewController:animated:] to push a subview and allow a navigation bar to be shown in subview. After pushing the subview, the tab bar must still be there.
Sounds simple, but I have no idea how to achieve it. Please help.
I started with a Window-based template instead and did this to achieve the same thing.
I created my NavigationControllers and TabBarController in my app delegate manually.
In your:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Add this:
//Seeting up the Navigation controllers and pushing our TableView controllers.
UINavigationController *unvc1 = [[UINavigationController alloc] init];
UINavigationController *unvc2 = [[UINavigationController alloc] init];
[unvc1 pushViewController:someViewController1 animated:NO];
[unvc2 pushViewController:someViewController2 animated:NO];
[someViewController1 release];[someViewController2 release];//Releasing our TableView controllers.
//Setting up the TabBar controller and pushing our Navigation controllers.
UITabBarController *tbvc = [[UITabBarController alloc] init];
tbvc.viewControllers = [NSArray arrayWithObjects:unvc1, unvc2, nil];
[unvc1 release];[unvc2 release]; //releasing our Navigation controllers.
I hope this helps.
I did this using presentModalViewController:animated . I added tabBar Controller in the modalView. In the method didSelectRowAtIndexPath use this presentModalViewController:animated .I might not be perfect but I had the same problem, but now my app works as I need.
I am creating an application which displays map using MKMapView control. I have a button on the map that takes me to different view (information view) using the following code:
InfoViewController *infoViewController = [[InfoViewController alloc] initWithJogInfo:jogInfo];
self.view = infoViewController.view;
Now after going to the information view I want to go back again to the main view which displays the map without having to loose anything. Is NagivationControlller my best option to use in this scenario?
Try this,
InfoViewController *infoViewController = [[InfoViewController alloc] initWithJogInfo:jogInfo];
[self.navigationController pushViewController:infoViewController animated:YES];
[infoViewController release];
once you push viewController back button is available to come back to rootViewController.
I have a textview which contains chat history obtained from a server.The chat history is being constantly updated through a thread which I had started in a previous view. My problem is how do I constantly update my UITextView to reflect the changes?
self.textView.text = [[NSString alloc]initWithFormat:#"%#",chatHistory];
I use something like this:
NSString *newMessage = [NSString stringWithFormat:#"%#\n%#", [textView text], newChat];
[textView setText:newMessage];
also make sure your GUI updates are on the main application thread.
[self performSelectorOnMainThread:#selector(updateMyGui) withObject:nil waitUntilDone:NO];
My view hierarchy containing the view from a MPMoviePlayerController vanishes the moment I present a Modal View Controller.
Instead of displaying a view with a movie and controls it depicts an earlier subview beneath it. I checked the subview array of the main view controller and all views including the movie player view exits.
Forcibly adding the movie player view after the modal view controller is done does not bring movie player view back on top.
Would welcome any suggestions/thoughts ?
your problem isn't specific to the MPMoviePlayerController. any time you present a modal view controller, all of the views from other view controllers beneath it disappear.
try it out with just a couple of simple view controllers.
in the app delegate, set your window background color to red:
[self.window setBackgroundColor:[UIColor redColor]];
then add a view controller with a green background:
UIViewController *vc = [[UIViewController alloc] init];
[[vc view] setBackgroundColor:[UIColor greenColor]];
self.window.rootViewController = vc;
finally, create another view controller with a transparent background, and present it modally:
UIViewController *vc2 = [[UIViewController alloc] init];
[[vc2 view] setBackgroundColor:[UIColor clearColor]];
[vc presentModalViewController:vc2 animated:YES];
you'd expect to see the green VC through the clear VC, but instead you see red (ie, you see the window).
Does any one have an idea how to access the UIScroller class , which is the default subview of UIWebView ?
I want to handle the touches, zooming , panning and scrolling features inside the webview .
Thanks..
I know this thread is old but if anyone comes across it there's a new way.
As of iOS 5 UIWebView now has a property called scrollView which you can't replace but you can set the properties of it. Most people just want to disable zooming/bouncing/scrolling all together which can be done by setting the properties of the scrollView for example if webview is a UIWebView:
webview.scrollView.bounces = NO; //Disables webview from bouncing
webview.scrollView.minimumZoomScale = webview.scrollView.maximumZoomScale = 1.0; //Forces zoom to be at 1 (can be whatever you fancy) and disables zooming
webview.scrollView.bouncesZoom = NO; //Disables bouncing when zooming exceeds minimum or maximum zoom
I suppose you could set the delegate for the scrollView if you want more control, though to be on the safe side you might want to store the original delegate and call its methods appropriately in your custom delegate.
Handling the touches would be more difficult since you can't replace the scrollView to provide your own handlers. Best you could do is add some gesture recognizers as part of the UIView and try to handle them there, but I think UIWebView will still receive the events. Alternatively in iOS 5 they let you access the gesture recognizers directly on UIScrollView.
You can find this by going like this:
[webview objectAtIndex:0]
That should be where it is. If not, put this in your code somewhere and run the program to search for the index of the UIScroller, and replace the 0 above with that index:-
for (UIView *subview in [webView subviews]){
NSLog(#"subviews of webView : %#", [[subview class] description]);
}