UIScrollview内容始终位于顶部

时间:2011-10-07 21:03:33

标签: ios xcode uiscrollview uigesturerecognizer

我正在尝试让我的UIScrollView占据所有屏幕并在其中放置一个用户可以缩放,平移等的图像。这一切都有效。但是,当用户点击屏幕一次时,我希望在此UIScrollView之上显示一个附加视图,其中包含有关图片的一些信息。问题在于,无论我做什么,UIScrollView的孩子ImageView始终位于顶部。我已经尝试更改xib中视图的顺序,我尝试使用bringSubViewToFront但没有成功。这是代码:

- (void)viewDidLoad {       
    [super viewDidLoad];
    UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(flipViewSingleTap:)];  
    singleTapGesture.delegate = self;    

    self.flippedImage.userInteractionEnabled = YES;
    [self.flippedImage addGestureRecognizer:singleTapGesture];

    [singleTapGesture release];

    self.flippedImageView.contentSize = CGSizeMake(1024, 768);
    self.flippedImageView.delegate = self;

    self.flippedMenuView.alpha = 0.0f;
}

- (IBAction)flipViewSingleTap:(UIGestureRecognizer *)sender {
    flipItemsVisible = !flipItemsVisible;
    [self.view bringSubviewToFront:self.flippedMenuView];
    [UIView animateWithDuration:0.5f 
                          delay:0.0f 
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         self.flippedMenuView.alpha = flipItemsVisible ? 1.0f : 0.0f
              } 
                     completion:nil];
}

3 个答案:

答案 0 :(得分:0)

也许将此行添加到viewDidLoad:

[self.view addSubview:self.flippedMenuView];

(这假设self.view是UIScrollView。)

答案 1 :(得分:0)

尝试添加忽略菜单视图的gestureRecognizer:shouldReceiveTouch:委托方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch {
  return ![touch.view isDescendantOfView:self.flippedMenuView];
}

答案 2 :(得分:0)

启用图像视图的userInteraction是不够的。 touchesMoved / Began的默认方法是空白的(我认为)。

确保您自己的UIImageView自定义子类是flippedImageView。覆盖这些方法并发送一个代表“userTappedImageAt:”之类的委托消息(自定义)。

如果您的子视图处理不会带来任何问题,并且您的触摸工作正常,请抓住应用程序委托窗口[[[UIApplication sharedApplication] delegate]窗口]并添加子视图,但它可能更安全使用视图,以便您可以使用convertPoint:from / to functions。

我告诉你的大部分内容都可以从阅读“观点和编程指南”中得到推断,以及有关SO的问题以及获得最佳观点的答案。

您可以随时“推送自己的”子视图,以避免使用未知的SDK识别器。

祝你好运, 斯蒂芬