我在简单的级别获得了帧/边界。仍在努力提升到更高级的用途......
我有一个类似于:
的视图堆栈
UICollectionViewCell
实际上是我自己的子类。我已将其设为selectionBackgroundView
作为库存UIView
,并在选择时切换hidden
属性。该容器视图包含一个或多个我自己的MyAnnotationView
实例。他的目的是注释细胞。但他所做的大部分绘图实际上都是在单元格视图的bounds
附近。
对于可能位于UICollectionView
中任意位置的单元格,他的frame
和bounds
将以正常方式(分别相对于父级和本地级)不同。在UIView
及其子视图(MyAnnotationView实例)的情况下,它们的框架和边界将是相同的,因为它们彼此重合。
但是为了让MyAnnotationView围绕他正在注释的单元格进行绘制,他需要了解单元格框架。 IOW,我希望它的0,0点与单元格相同,但我喜欢它,如果我可以参考他的框架,并且它与它的价值相同细胞'第是否可以通过这种方式配置该视图的帧/边界?或者我必须进行硬编码搜索,例如
self.superview.superview.frame
如果我新建注释视图的框架,红线就是我可以做的一个简单示例。我会从注释的左边中间开始一行到框架的左边x否定,并且相同的y值。
也许是这个问题的更一般版本,是否有一种(简单的)方法将绘图的注释视图的坐标系统与UICollectionView的坐标系统同步,但是仍然要知道它在哪里#&# 39; s在周围注释,是在?
答案 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
}