I am very new to iOS development.
My app is a drawing app where you can have multiple pages, and these pages accessed with a drag forwards or backwards -- like iBooks.
The 'Draw View' only accepts input from Apple Pencil, but I can't figure out how to get the view controller to change the page only if the input is a finger. I tried using touchesBegan on the view controller and getting touch.type but this didn't work; it seems only the view receives the touches -- not the view controller. This is a huge problem because it means I can't draw with the pencil -- I can only change the page.
TLDR: how do I get my view controller to not change page when Apple Pencil is the input source?
EDIT: this is not a duplicate question. I already know how to differentiate between a touch of a finger and a touch of the pencil (using touch.type) as I said in the question. however, only the view is receiving touches when I touch the screen, not the view controller. So how do i tell the view controller the type of the touch the view is receiving.
Related
I'm making an app for my Independent Study, and I have a UI functionality in mind - I just don't know how I would go about implementing it.
It's very simple in theory.
I want to have an initial view that fills the screen. When the user swipes up from the lower middle part of the screen, I want to do something that acts similar to control center, but for it to be a view that allows for me to choose between each of the 7 days in the upcoming week, displayed as icons with tags, and the user can swipe through them similar to how one swipes through the pages of apps on the home screen.
Similar to control center, the view should animate by sliding in from down to up, take up only part of the screen (In my case, about 1/5 of the screen as opposed to control center taking up more than 1/2) and the view behind it should of course remain running.
I am a beginner with iOS trying to get on my feet.
My question really boils down to this: I am unsure of what View class to use in interface builder for this, and whether or not this requires a segue/new view controller.
My initial thought was to drag and drop a View into the top level view, set its boundaries to how I want it to end up, then set it to hidden until I handle a swipe up, at which point it animates by sliding up.
I have done my best to describe my question but I am willing to clarify further if needed.
You can use 2 scenes in StoryBoard.
One as the mainView and one as the controlPanel.
Design as you like. You can detect user calling it by using UISwipeGestureRecognizer. And call the segue to that controlPanel scene.
On the controlPanel scene, you should set the backgroundColor to clearColor, and add another UIView on it with blackColor and alpha 0.5f.
To present it above the mainView, use modal presentation.
I want to implement a hold-to-preview button that brings up a view containing an AVPlayerLayer, which plays as long as the touch doesn't end. The video player is contained in a different view controller, and I am hoping to be able to use presentViewController:animated: when presenting it, and not just add it as a subview and child view controller.
My question is about how to deal with the touch event. I see two possible ways:
I try to transfer the active touch down event to the presented view controller (not sure if even possible), or
I try to keep the original view controller's gesture recognizer active, and then let the video view controller know when it's time to dismiss itself. I'm hoping this could be achieved either by just setting the presented view controller's userInteractionEnabled to false, or perhaps using a UIViewControllerTransitioningDelegate to present it, and then just skip calling completeTransition: or something similar (I believe touches don't register on the new view until you complete the animation, but please correct me if I'm wrong).
My question is about how to deal with the touch event.
Touches are always associated with the view that they start in. You can't transfer the touch to a different view. I've never tried it, but the options I think you should explore first are:
Use view controller containment. Make your preview view controller a child view controller of the one where the touch originates. That way the parent and its view hierarchy never go away, although they could be covered up.
Attach the gesture recognizer to the window. A window is a view, and should be able to have gesture recognizers. You could make the gesture recognizer's target the app delegate or some other object that will always be around, and have the delegate post a notification when the recognizer is triggered. Again, I haven't tried this, but it seems like it should work.
How do you create a banner (say, above a UITableView or something) that will switch images after a given time, or upon swipe. It then recycles through after a set number of images. See the below provided example from the IF app).
Also, I'm not necessarily looking for code here, but simply general features of Xcode I'd use to make it happen (ie, UIImageView within a ContainerView with gesture recognizers or something). Any ideas?
Here's the first image:
Then the beginning of the transition:
Then the second image in place:
This is an example of how to get that exact behavior using UIPageViewController. From the documenation:
A page view controller lets the user navigate between pages of content, where each page is managed by its own view controller object. Navigation can be controlled programmatically by your app or directly by the user using gestures. When navigating from page to page, the page view controller uses the transition that you specify to animate the change.
I am trying to figure out how to create a "Now Playing" view similar to the one in the Music app and the Spotify app.
Here are a few images of what I'm trying to re-create:
Creating the view is not the problem. The part I'm having trouble with is how to keep the view on the screen at the bottom with the now playing information on it, but then when clicked, flicked, or swiped up, make it show like a modal.
Is this something that can be set up in Storyboard, or is it completely custom? How would you set this up?
Thank you in advanced for the help.
My guess is for Spotify it's custom as their implementation predates storyboards being... I'll use the term "friendly" to 3rd party developers.
However if you're building with the latest Xcode and iOS SDK this should be fairly easy to accomplish by building a container view controller wherein the child view would be everything in the upper quadrant, and you would effectively make that parent viewcontroller (with the now playing view area on the bottom) the root view controller.
As for the flicking / tapping, that's probably just a typical gesture recognizer that loads a modal. I can't recall if Apple's implementation is panning, but Spotify's is. My guess with them is as you as you tap down they load a new VC that's mostly obscured off screen and that's what actually gets panned in.
Is there a way to achieve the iTunes style modal view controller chain (see screenshot)?
I've looked around quite a bit but couldn't find any real questions about this. I'm not looking for a replacement or workaround, just want to know if it is possible to do with the current SDK (or iOS 5.0, although we are not supposed to talk about it a simple Yes/No would suffice).
For those who can not make it out from the image; iTunes on the iPad has this great feature where you can view a movie in a formsheet style modalviewcontroller, and if you click on another movie in that same modalviewcontroller it will create a new modalviewcontroller with the movie info you clicked on and will slide the 'old' one out (to the left). It will slide back in when the center modalviewcontroller is dismissed.
UPDATE:
I'm sure it has been done before, but I wrote my own implementation. It turned out not to be very difficult, although it misses some context-animations (like the flip from position), it is pretty usable. Since I wrote it for iOS 5, I will make the code public this fall when the NDA is lifted.
I suspect that it's a single modal view controller with a scrollview. The scroll view has a semitransparent background and displays several "pages". If you take that approach, I can't imagine it being too difficult to implement.