修改:
在发布此问题后,我立即找到了一行我错过评论的代码。就是这个...... mapViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
我对此进行了评论,地图又重新开始了。
你知道为什么那行代码会杀死地图手势识别器吗?
我有一个MKMapView,最近几个月工作得很好,今天就退出了。
我今天做的唯一一件事,就是弄乱代码,就是在viewWillTransitionToSize:withTransitionCoordinator:
和viewWillLayoutSubviews
中使用一些方向代码。这就是IT !!!
我评论了我在那里所做的一切,但它已经死了。
它不仅不会响应我自己的手势识别器,它也不会响应任何自己的识别器......捏,旋转等等。它只是冻结了。
我在地图上没有任何阻碍触摸的视图。
我有控制清理(编辑)我的构建文件夹。
我关闭了XCode项目并清除了该项目的派生数据文件夹。
@implementation MapViewController
{
MKMapView *appleMapView;
}
-(void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self addMapViewToSelf];
}
-(void)addMapViewToSelf
{
// Create and add the apple map view to the side menu view.
appleMapView = [[MKMapView alloc] initWithFrame:self.view.frame];
[self.view addSubview:appleMapView];
appleMapView.delegate = self;
UILongPressGestureRecognizer *tapRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(windowTapped:)];
tapRecognizer.minimumPressDuration = 1.0f;
tapRecognizer.delegate = self;
[appleMapView addGestureRecognizer:tapRecognizer];
}
-(void)windowTapped:(UIGestureRecognizer *)recognizer
{
NSLog(@"The recognizer state is '%ld'", (long)recognizer.state);
if (recognizer.state != UIGestureRecognizerStateBegan) {
return;
}
}
答案 0 :(得分:1)
AutoResizingMask是边界变化时UI元素(例如Label)移位的属性。意味着当方向改变时,应用程序会适应并且不会崩溃。但是如果你将autoResizingMask设置为Constraint,你告诉它根据autoResizingMask更改约束。这是每个UI元素的默认行为。这有助于我们使用self.view.centre或self.view.frame或self.label.size.width等方法快速动态地排列UI元素。
设置translatesAutoresizingMaskIntoConstraints = NO您实际上是在删除此行为。因此,您必须提供UI元素固定坐标,以便无论屏幕方向如何,UI元素都会保留在那里。但你没有这样做。因此,UIElement没有约束或固定的位置,并且表现得很糟糕。
如果您不想动态播放UI的位置或大小,则不能将其设置为NO。像基于输入的增长文本字段或一些原始动画。
这是Apple试图告诉你同样的事情。
当视图的边界发生变化时,该视图会自动调整其大小 根据每个子视图的自动调整掩码进行子视图。你指定 通过组合中描述的常量来组合掩码的值 UIView使用C按位OR运算符进行自动调整。结合这些 常量允许您指定视图的哪些维度应该增长或 相对于superview缩小。此属性的默认值 是UIViewAutoresizingNone,表示视图不应该是 根本没有调整大小。
如果设置了同一轴上的多个选项,则为默认值 行为是按比例分配大小差异 灵活的部分。柔性部分相对于柔性部分越大 其他柔性部分,它可能越多。例如, 假设此属性包含UIViewAutoresizingFlexibleWidth和 UIViewAutoresizingFlexibleRightMargin常量但不包括 UIViewAutoresizingFlexibleLeftMargin常量,从而表明 视图左边距的宽度是固定的,但视图的宽度是固定的 宽度和右边距可能会改变。因此,视图似乎锚定于 其超视图的左侧同时具有视图宽度和间隙 在视图右侧增加。
如果自动调整行为不能提供您的精确布局 需要您的视图,您可以使用自定义容器视图和覆盖 它的layoutSubviews方法可以更精确地定位您的子视图。
我犯了一百万次这样的错误,这个博客有一个很好的解决方案。