2

UICollectionView一連UICollectionViewCellの がありUICollectionViewFlowLayoutます。

各セルにはUIImageView、indexPath に応じて、セル自体よりも大きい が含まれます。セルはその内容を切り取らないため、常に画像全体を見ることができます。

しかし、セルのフレームの外側ではなく、画像の内側でタッチして、通常のタッチとして機能し、セルの選択を開始することはできません。

メソッドhitTest:withEventpointInside:withEventのオーバーライドを試みましたUICollectionViewCellが、変更はありません。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    if (CGRectContainsPoint(self.imageView.frame, point)) {
        NSLog(@"Contains: %d", cellIndex);
        return self;
    }
    NSLog(@"Doesn't contain: %d", cellIndex);

    return [super hitTest:point withEvent:event];
}


- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {

    if (CGRectContainsPoint(self.imageView.frame, point)) {
        NSLog(@"Inside: %d", cellIndex);
        return YES;
    }

    NSLog(@"Outside: %d", cellIndex);
    return NO;
}

画面にコレクション ビューの最初の 3 つの要素があり、3 つ目の要素 (セルのフレームの外側ですが、UIImageView の内側) をタップすると、次のようにトレースされます。

2013-05-06 10:53:38.395 Contigo[3351:c07] Doesn't contain: 0
2013-05-06 10:53:38.395 Contigo[3351:c07] Outside: 0
2013-05-06 10:53:38.396 Contigo[3351:c07] Contains: 2
2013-05-06 10:53:38.396 Contigo[3351:c07] Doesn't contain: 0
2013-05-06 10:53:38.396 Contigo[3351:c07] Outside: 0
2013-05-06 10:53:38.396 Contigo[3351:c07] Contains: 2
2013-05-06 10:53:38.396 Contigo[3351:c07] Doesn't contain: 0
2013-05-06 10:53:38.396 Contigo[3351:c07] Outside: 0
2013-05-06 10:53:38.397 Contigo[3351:c07] Contains: 2
4

0 に答える 0