I have Create UIScrollview Programatically.I have added 5 View and each view have Imageview with image. I am doing zoom in/zoom out image using UIPanGesture i can zoom in and zoom out image using PanGesture but when i scroll the scrollview then UIImageview not set its actual frame. i want to resize subview of scrollview when scrollview scroll.
Thanks in Advance
Set your view controller a delegate of your scrollview:
scrollview.delegate = self;
Then, implement this delegate method in your viewcontroller:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
// resize subview of scrollview here
}
You need to set some object as the scrollview's delegate and then implement this method:
-(void)scrollViewDidScroll:(UIScrollView *)inScrollView
Then you can do whatever you would like with the subviews whenever the scrollview scrolls (this includes automated scrolling, not just when the user scrolls).
Related
I have the following view structure, the root view is UIScrollView, UIScrollView has two subViews, it is a UIView, the following is a scrollView, set contentSize scrollView for the content view size, I want to be contentOffset.y scrollView view.height when the current sliding event transfer to the following tableView to continue processing, so that tableView and scrollView continue to slide
You could catch each scroll event from your scroll view using this delegate method
- scrollViewDidScroll:
and then apply same content offset to the table view.
I have a view controller with this hierarchy:
View Controller:
UIScrollView (scrollable horizontally)
UITableView (scrollable vertically)
I want to forward the vertical scrolls from my UIScrollView to the sibling UITableView, so that when the user scrolls up on the UIScrollView, the UITableView will scroll up instead. What would be the best way to do it?
I have tried these:
Detecting the vertical scroll in scrollViewDidScroll, it doesn't get called because the contentOffset of the scroll view does not change.
Subclassing the UIScrollView and overriding touchesMoved, I can't forward the touches to the table view because I don't have a reference to it in this class.
If the tableview is contained within the scroll view I believe you can set up the scroll view's gesture recognizers to respond only if the table view's gesture recognizers fail. I haven't had a chance to try this, but you should be able to set up a dependency between the gestures for each of the views.
UITableView* tableView = ...;
UIScrollView* scrollView = ...;
for (UIGestureRecognizer* r in scrollView.gestureRecognizers)
{
for (UIGestureRecognizer* tableRecognizer in tableView.gestureRecognizers)
{
[r requireGestureRecognizerToFail:tableRecognizer];
}
}
This will make your scroll simultaneously with UITableView and UIScrollView and apply #Stephen Johnson's block
- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
I have a complex view hierarchy:
UIScrollView
- UITableView
- UICollectionView
The UICollectionView and UIScrollView both scroll horizontally. Now, I want to capture the swipe gesture exclusively on UICollectionView so that the superview (UIScrollView) ignores it.
User can swipe left to get to the end of UICollectionView. When at the end, the swipe gesture on UICollectionView is ignored and captured by the superview (UIScrollView) and the interface changes. How can I prevent that from happening?
Note: I'm using the default swipe functionality provided by both UIScrollView and UICollectionView i.e. I'm not adding any custom swipe gesture handling.
In your ViewController.m
-(void)viewDidLoad
{
scrollView.delegate = self;
collectionView.delegate = self;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if (the scrollView didn't reached the end){
then collectionView can't scroll
}else{
collectionView can scroll
}
}
You can check to see if the scrollView reached the end with the contentOffset property
Don't forget to declare that you are using the delegate of scrollView
Hope that helps
I have a scroll view with an image view. And I want to zoom the image in all direction equally. But when I am trying to do it's not happening.
But its zooming image only in vertical direction not in horizontal direction. I have done this:
[monthView setImage:[monthArray objectForKey:dateString] ];
scrollView1.contentSize=CGSizeMake(1280, 960);
#pragma scrollview delegates
-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return monthView;
}
Write minimumZoomScale and maximumZoomScale value of scrollView in viewDidLoad
_scrollview.minimumZoomScale=1.0;
_scrollview.maximumZoomScale=2.0;
Set zooming scale for scrollview. Like:
self.myScrollView.minimumZoomScale = 1.0;
self.myScrollView.maximumZoomScale = 5.0f;
And Make sure monthView is a subview of scroll view.
Hope this helps. :)
1 Set your view controller up as a .
2 Draw your UIScrollView the size you want for the rectangle at the center of the view. Set the max zoom in the inspector to something bigger than 1. Like 4 or 10.
3 Right click on the scroll view and connect the delegate to your view controller.
4 Draw your UIImageView in the UIScrollView and set it up with whatever image you want. Make it the same size as the UIScrollView.
5 Ctrl + drag form you UIImageView to the .h of your View controller to create an IBOutlet for the UIImageView, call it something clever like imageView.
6 add this code.
-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView {return self.imageView;}
7 Run project.
I need to place a photo in the screen and it should be able to be scrolled or zoomed,
I know UIScrollView does these, so I alloced one, but how about my photo?
I guess I should not just set the photo as the backgroundColor of my UIScrollView, and I haven't found any property of UIScrollView, in the document, to hold an image, such as "imageView", "contentView", or something like that.
So, what should I do to make a picture in my screen and make it able to respond to finger touches?
Thanks a lot!
Add the UIImageView to the UIScrollView and set the min/max scale value to it.
Then implement the following UIScrollViewDelegate function.
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return yourImageView;
}
If you want to have multiple items scaled, add all the view into a UIView, and put that UIView inside the UIScrollView. Of course you have to change the return view to that UIView in the above function.
Just add your UIImageView as a subview of the UIScrollView. Also, set the scroll view's contentSize property to be equal to the size of the image view's frame.
THe scrollView is the first step.
Then you should add a UIImageView and load an image inside.
You need also to set the max e min zoomScale properties of the scrollview
And you must implement the scrollview delegate method – viewForZoomingInScrollView: