我自定义了我的MKAnnotationView,当我触摸它时,它输入以下代码
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
CellThumbnailView *thumbnailView = (CellThumbnailView *)view;
[mapView setCenterCoordinate:thumbnailView.thumbnail.coordinate animated:YES];
CGSize size = [thumbnailView.thumbnail getThumbnailSize];
thumbnailView.frame = CGRectMake(0, 0, size.width, size.height);
thumbnailView.centerOffset = CGPointMake(0, -[thumbnailView.thumbnail getThumbnailCenterOffset] + size.height / 2);
// Center map at annotation point
thumbnailView.imageView.center = CGPointMake(size.width / 2, size.height/ 2);
thumbnailView.imageView.bounds = CGRectMake(0, 0, size.width, size.height);
thumbnailView.imageView.image = [UIImage imageNamed:[thumbnailView.thumbnail getPopupImageName]];
CGSize labelOffset = [thumbnailView.thumbnail getThumbnailLabelOffset];
thumbnailView.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 45, 20)];
thumbnailView.titleLabel.backgroundColor = [UIColor clearColor];
thumbnailView.titleLabel.textColor = [UIColor blueColor];
thumbnailView.titleLabel.shadowColor = [UIColor colorWithWhite:1 alpha:0.5];
thumbnailView.titleLabel.shadowOffset = CGSizeMake(0, -1);
thumbnailView.titleLabel.font = [UIFont boldSystemFontOfSize:17];
thumbnailView.titleLabel.alpha = 1;
thumbnailView.titleLabel.minimumScaleFactor = .8f;
thumbnailView.titleLabel.adjustsFontSizeToFitWidth = YES;
thumbnailView.titleLabel.center = CGPointMake(thumbnailView.center.x - labelOffset.width, thumbnailView.center.y - labelOffset.height);
thumbnailView.titleLabel.text = [NSString stringWithFormat:@"%dG", thumbnailView.thumbnail.traffic];
[thumbnailView addSubview:thumbnailView.titleLabel];
self.location.text = thumbnailView.thumbnail.desc;
self.traffic.text = thumbnailView.titleLabel.text;
self.reportView.hidden = NO;
}
如果您注意到这一点:
thumbnailView.frame = CGRectMake(0, 0, size.width, size.height);
这意味着我想将缩略图更改为大缩略图,因此我更改了框架 但随着这个框架的改变,当我触摸视图时,它会消失 但是在我放大或缩小之后,它再次显示出来。
奇怪的是:当我删除那个帧更改时,问题就消失了。
我想知道为什么以及如何解决这个问题(如果可能,我仍然需要更改框架)。
答案 0 :(得分:0)
更改框架后,您是否尝试过调用[thumbnailView layoutSubviews]
?我有一个类似的问题,我的视图只是在帧更改后消失,直到地图被触摸/缩放/等等。这是让autolayout完成魔法的缺失环节。
<强>更新强>
实际上,这可能是一个红鲱鱼。似乎最终对我有用的是直接操纵MKAnnotationView的centerOffset
属性而不是frame
。对frame
做事会导致奇怪的效果,原点会暂时“重置”到0,0
,并且只有在触摸地图时才会恢复正常。最后,我使用centerOffset
,调整了子视图的帧,并使用了this solution的hittesting来使子视图中的交互起作用。
答案 1 :(得分:0)
这对我来说很有把戏
CGSize size = [self customSize];
if (!CGSizeEqualToSize(size, self.frame.size))
{
[self setFrame:CGRectMake(0, 0, size.width, size.height)];
}
为所有设置框架解决了所有问题,为iOS 7构建并未显示此问题。