【问题标题】:'Hold' UIButton Behaviour - `Touch Cancelled` Control State blocking further control states'Hold' UIButton 行为 - `Touch Cancelled` 控制状态阻止进一步的控制状态
【发布时间】:2011-02-15 12:35:34
【问题描述】:

我在子视图视图上有一个按钮(为了说话,子视图是一个红色方块),当用户按住该按钮时,红色方块会变成半透明动画。

我有按钮连接到这个方法:

-(IBAction)peekToggle:(id)sendr{        

    NSLog(@"TOGGLE");

    if(self.view.alpha ==1)self.view.alpha = 0.1;   
    else self.view.alpha = 1;       
}

通过行为:touch up insidetouch up outsidetouch down。因此,当我按住按钮时,红色框变成半透明的,当我松开手指时,它又恢复为不透明。 这最初工作正常,但是如果我按住按钮超过 1 秒,则按钮不会注册 touch up(松开手指)。

注意:我在父视图上确实有一个 longPressGestureRecogniser(子视图的父不是 Button 的父),但它没有被触发(预期)。

我很确定我长按按钮被注册为touch cancel,然后使修饰事件无效。

我该如何预防/解决这个问题?

我可以停止touch Cancel 射击吗? (即使我没有注册控件状态,此事件似乎也会触发)或在touch Cancel 事件中,告诉按钮保持/开始注册事件?

【问题讨论】:

  • longPressGestureRecogniser 在父级上?然后它不会触发,因为父级在按钮“后面”。尝试将 longPressGestureRecogniser 添加到它自己的按钮。如果触摸未被识别,识别器将向下级联触摸到按钮。
  • 我应该更清楚,parent = Subview 的父级而不是按钮的父级,我不想要长按事件,长按按钮会触发触摸取消,无论它是否已注册事件与否。

标签: iphone objective-c cocoa-touch ipad ios


【解决方案1】:

解决方案:

完全删除了 IBActions 并将 UILongPressGestureRecognizer 添加到 按钮,持续时间很短。

    UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];    
        recognizer.minimumPressDuration = 0.1;  
        [self.peekButton.view addGestureRecognizer:recognizer];
        [recognizer release];

然后在 gr 的选择器中,读取 gr 的状态:

    - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{ 

        //1 = start
        if(gestureRecognizer.state==1 || gestureRecognizer.state==3)[self peekToggle];
        //3=end
}

【讨论】:

    【解决方案2】:

    如果您认为这是您的问题,可以尝试覆盖 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 并查看那里是否有任何活动。

    【讨论】:

    • 我这样做了,它按预期触发,似乎使我在帖子中所说的修饰无效。
    【解决方案3】:

    您可以使用 UIGestureRecognizerDelegate 接口来微调手势识别器何时触发。

    【讨论】:

    • Touch Canceled 不是手势,因此无法通过此界面进行微调
    • 听起来您认为手势识别器正在取消触摸。对我来说,这听起来像是一个合理的假设。您可以使用委托界面使手势识别器忽略您的按钮,因此不要取消该触摸。这就是我要说的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2019-11-25
    • 1970-01-01
    • 2015-12-21
    • 2015-12-15
    相关资源
    最近更新 更多