Emm*_*ett 9 uiscrollview uicontrol ios ios7
我在UIScrollView中有一个UIControl.在我的UIControl中init,我安装了一些触摸事件处理程序,例如
[self addTarget:_delegate
action:@selector(touchedDown) forControlEvents:UIControlEventTouchDown];
Run Code Online (Sandbox Code Playgroud)
当我执行以下操作时,iOS6和iOS7的行为会有所不同:
在iOS6中,我的应用程序继续按预期运行:步骤#2中的点击不调用 touchedDown - UIScrollView吞下触摸事件,因为它立即停止滚动.
但是在iOS7中,UIScrollView会按预期停止滚动,同时touchedDown 仍然会调用.
是否有记录的API更改?我希望我的应用程序在iOS7中的行为与iOS6完全相同.
小智 9
适用于iOS 7的解决方法
@interface UIScrollViewFixed : UIScrollView
@end
@implementation UIScrollViewFixed
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (self.isDragging || self.isDecelerating) {
return self;
}
return [super hitTest:point withEvent:event];
}
@end
Run Code Online (Sandbox Code Playgroud)
不是很优雅,但在没有任何更好的想法的情况下,这就是现在对我有用的方法:
canCancelContentTouches为YES和。delaysContentTouchesNOuserInteractionEnabled当 UIScrollView 滚动时切换 UIScrollView 的子视图的属性:- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[_contentView setUserInteractionEnabled:NO];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate) {
[_contentView setUserInteractionEnabled:YES];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[_contentView setUserInteractionEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
touchesCancelled:withEvent以反转处理UIControlEventTouchDown程序所做的任何操作:- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
//custom logic
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7768 次 |
| 最近记录: |