我在我的程序中有一個主視圖,其中有一個可拖動的視圖。這個視圖可以用平移手勢拖動。目前雖然它使用了很多我想放在子類中的代碼來降低複雜性。 (我最終希望通過允許用戶通過進一步的平移手勢來擴展視圖來增加功能,這意味着如果我不能先排序,將會有更多的代碼堵塞我的視圖控制器)我可以將手勢識別器的代碼放在視圖的子類中嗎?
是否有可能在類的子類中擁有手勢識別器的代碼,並仍然與父類中的視圖進行交互。
這是我使用,以便能夠在父類移動手勢當前代碼:
-(void)viewDidLoad {
...
UIView * draggableView = [[UIView alloc]initWithFrame:CGRectMake(highlightedSectionXCoordinateStart, highlightedSectionYCoordinateStart, highlightedSectionWidth, highlightedSectionHeight)];
draggableView.backgroundColor = [UIColor colorWithRed:121.0/255.0 green:227.0/255.0 blue:16.0/255.0 alpha:0.5];
draggableView.userInteractionEnabled = YES;
[graphView addSubview:draggableView];
UIPanGestureRecognizer * panner = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panWasRecognized:)];
[draggableView addGestureRecognizer:panner];
}
- (void)panWasRecognized:(UIPanGestureRecognizer *)panner {
UIView * draggedView = panner.view;
CGPoint offset = [panner translationInView:draggedView.superview];
CGPoint center = draggedView.center;
// We want to make it so the square won't go past the axis on the left
// If the centre plus the offset
CGFloat xValue = center.x + offset.x;
draggedView.center = CGPointMake(xValue, center.y);
// Reset translation to zero so on the next `panWasRecognized:` message, the
// translation will just be the additional movement of the touch since now.
[panner setTranslation:CGPointZero inView:draggedView.superview];
}
(Thanks to Rob Mayoff for getting me this far)
我現在已經添加視圖的一個子類,但不能弄清楚如何或我需要創建手勢識別器,因爲視圖正在子類中創建並添加到父類中。
我真的希望手勢識別器的目標是在這個子類中,但是當我嘗試編碼時它什麼也沒有發生。
我試圖把在子類中的所有代碼,並添加移動手勢的看法,但後來我得到一個壞的訪問崩潰,當我試圖拖動它。
我目前正在使用
[graphView addSubview:[[BDraggableView alloc] getDraggableView]];
將其添加到子視圖,然後設置在功能getDraggableView(加入移動手勢等)的觀點在子類中
必須有一種更直接的做法,我還沒有將其概念化 - 我仍然很新的處理子類,所以我仍然在學習它們如何融合在一起。
感謝您的幫助,您可以給