我可以让我的UIView框架与其曾祖父母相匹配吗?

时间:2014-03-14 00:18:14

标签: ios uiview ios7 bounds

我在简单的级别获得了帧/边界。仍在努力提升到更高级的用途......

我有一个类似于:

的视图堆栈

enter image description here

UICollectionViewCell实际上是我自己的子类。我已将其设为selectionBackgroundView作为库存UIView,并在选择时切换hidden属性。该容器视图包含一个或多个我自己的MyAnnotationView实例。他的目的是注释细胞。但他所做的大部分绘图实际上都是在单元格视图的bounds附近。

对于可能位于UICollectionView中任意位置的单元格,他的framebounds将以正常方式(分别相对于父级和本地级)不同。在UIView及其子视图(MyAnnotationView实例)的情况下,它们的框架和边界将是相同的,因为它们彼此重合。

但是为了让MyAnnotationView围绕他正在注释的单元格进行绘制,他需要了解单元格框架。 IOW,我希望它的0,0点与单元格相同,但我喜欢它,如果我可以参考他的框架,并且它与它的价值相同细胞'第是否可以通过这种方式配置该视图的帧/边界?或者我必须进行硬编码搜索,例如

self.superview.superview.frame

如果我新建注释视图的框架,红线就是我可以做的一个简单示例。我会从注释的左边中间开始一行到框架的左边x否定,并且相同的y值。

也许是这个问题的更一般版本,是否有一种(简单的)方法将绘图的注释视图的坐标系统与UICollectionView的坐标系统同步,但是仍然要知道它在哪里#&# 39; s在周围注释,是在?

2 个答案:

答案 0 :(得分:1)

即使它已经晚了,对于其他人来说,这是一个解决方案。 从父类重写applyLayoutAttributes,即UICollectionViewCell或UICollectionReusableView

@interface MyCustomCell : UICollectionViewCell
{
    UIView *_annotationView;
}
@end

@implementation MyCustomCell
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    [super applyLayoutAttributes:layoutAttributes];
    _annotationView.frame = layoutAttributes.frame;
}
@end

答案 1 :(得分:0)

好吧,忽略一分钟的糟糕设计,我建议让注释视图意识到它们在UICollectionView世界中的位置的最佳方法是通过保持对集合视图的弱引用,然后在layoutSubviews中查询该集合视图。

所以:

@property (nonatomic, weak) UICollectionView* owningCollectionView;

- (void)layoutSubviews
{
    [super layoutSubviews];

    self.frameInCollectionViewSpace = [self.owningCollectionView convertRect:self.frame fromView:self];

    //Use it here
}