2

我自定义了我的 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);

这意味着我想把我的缩略图改成一个大的,所以我改变了框架。
但是随着这个框架的变化,当我触摸视图时,它就消失了。
但是在我放大或缩小后,它再次显示。

奇怪的是:当我删除那个框架变化时,问题就消失了。

我想知道为什么以及如何解决这个问题(如果可能的话,我仍然需要更改框架)。

4

2 回答 2

0

这对我有用

CGSize size = [self customSize];

if (!CGSizeEqualToSize(size, self.frame.size))
{
    [self setFrame:CGRectMake(0, 0, size.width, size.height)];
}

设置框架一次就解决了任何问题,为 iOS7 构建并没有显示这个问题。

于 2014-05-06T09:34:44.477 回答
0

您是否尝试过[thumbnailView layoutSubviews]在更改框架后拨打电话?我有一个类似的问题,我的视图在框架更改后消失,直到地图被触摸/缩放/无论如何。这是让自动布局发挥其魔力的缺失环节。

更新 实际上,这可能是一个红鲱鱼。对我来说似乎绝对有用的是操纵centerOffsetMKAnnotationView 的属性,而不是frame直接操纵它。做一些事情会frame导致奇怪的效果,即原点暂时“重置”到0,0并且只有在触摸地图时才恢复正常。最后,我改用centerOffset了,调整了子视图的框架,并使用了这种hittesting的解决方案来使子视图中的交互起作用。

于 2014-01-04T17:12:15.930 回答