我在UIViewController
中有UICollectionView
,我希望它響應UICollectionView
之外的AND內部的手勢。默認情況下,UICollectionView
只對其自己的view
內的手勢做出響應,但是如何才能使其響應在view
之外滑動?如何讓集合視圖對自己視圖外的平移手勢做出響應
謝謝。
我在UIViewController
中有UICollectionView
,我希望它響應UICollectionView
之外的AND內部的手勢。默認情況下,UICollectionView
只對其自己的view
內的手勢做出響應,但是如何才能使其響應在view
之外滑動?如何讓集合視圖對自己視圖外的平移手勢做出響應
謝謝。
我寫的只是實現這個視圖子類:
#import <UIKit/UIKit.h>
@interface TouchForwardingView : UIView
@property (nonatomic, weak) IBOutlet UIResponder *forwardingTarget;
- (instancetype)initWithForwardingTarget:(UIResponder *)forwardingTarget;
@end
#import "TouchForwardingView.h"
@implementation TouchForwardingView
- (instancetype)initWithForwardingTarget:(UIResponder *)forwardingTarget
{
self = [super init];
if (self)
{
self.forwardingTarget = forwardingTarget;
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.forwardingTarget touchesBegan:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
[self.forwardingTarget touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesCancelled:touches withEvent:event];
[self.forwardingTarget touchesCancelled:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
[self.forwardingTarget touchesMoved:touches withEvent:event];
}
@end
在Interface Builder中,設置包含視圖TouchForwardingView的子視圖,然後指定集合視圖到forwardingTarget財產。
釘槍的前面回答的斯威夫特版本,這將在視圖 - 控制做了所有的手勢轉發到的CollectionView
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
collectionView.touchesBegan(touches, withEvent: event)
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
collectionView.touchesEnded(touches, withEvent: event)
}
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
collectionView.touchesCancelled(touches, withEvent: event)
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
collectionView.touchesMoved(touches, withEvent: event)
}
史蒂芬B的答案與雨燕4 :)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
collectionView.touchesBegan(touches, with: event)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
collectionView.touchesEnded(touches, with: event)
}
override func touchesCancelled(_ touches: Set<UITouch>?, with event: UIEvent?) {
collectionView.touchesCancelled(touches!, with: event)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
collectionView.touchesMoved(touches, with: event)
}
使用'觸動:began'在你的'viewController'中 – Santosh