2 Replies Latest reply: Dec 17, 2013 12:29 AM by mcanovaspedreno
zinc1oxide1 Level 1 Level 1 (5 points)

I have placed 2 views (table views) within a view container that are partially overlapped, on purpose.  View A overlaps about 50% of View B.

 

Screen Shot 2013-01-09 at 2.03.57 PM.png

If I move View B so they no longer overlap:

 

Screen Shot 2013-01-09 at 2.26.48 PM.png  Screen Shot 2013-01-09 at 2.41.57 PM.png

 

The screenshot on the left shows the 2 views after the move.  The screen on the right shows a blue region which represents where the original view was and where the touch events for viewB are. 

 

The previously overlapped region within View A does not respond to touch events, that is, ~50% does not, i.e. the overlapped portion you see in the above screen shot..  Only the region that wasn't orginally overlapped does.  In addition, within View B, the portion that is now occupying new space within the superview, does not respond to touch events, only the portion of the view that happens to occupy the old region.

 

The code is simple that I'm using to move the view:

 

       UIView* viewA = [self.childViewControllers[0] view];

    UIView* viewB = [self.childViewControllers.lastObject view];

   

    CGRect rect = main.frame;

    rect.origin.x += viewB.frame.size.width;

 

    [UIView animateWithDuration:0.2 animations:^{

        viewB.frame = rect;

    }];

 

Visually, the view moves but the touch region doesn't.

 

I used the new storyboard "Container View" mechanism within iOS 6 to initially place the views.

 

I have no idea why this is happening.  Any ideas?

 

Thanks.


iMac, Mac OS X (10.7.2), 27" Intel Core I5 - 4GB ram
  • 1. Re: Overlapping views and touch event regions are inconsistent
    zinc1oxide1 Level 1 Level 1 (5 points)

    As it turns out, when xCode adds the "Container View" within my storyboard, it embeds my view within a parent view.   So I need to do the following:  (Note: code slightly simplified from above)

    UIView* viewB = [[self.childViewControllers.lastObject view] superview]; 


    CGRect rect = viewB.frame;

    rect.origin.x += 200; 

    [UIView animateWithDuration:0.2 animations:^{ viewB.frame = rect; }];

    Because the container embeds my view within it's own view, I need to get the superview and work with that.

    If I were to do all of this programatically, that is, add the container and view myself using the container API, my original code would work.

  • 2. Re: Overlapping views and touch event regions are inconsistent
    mcanovaspedreno Level 1 Level 1 (0 points)

    The childviewcontroller view is a subview of your "container view" (it is a UIView too).

     

    You can do an IBOUTLET for your "container view" and use it for moving.