2009-10-26 76 views
0

我有一個相當棘手的滾動scenerio我需要排序。我有一個父級UIScrollView與單個容器視圖包含兩個子UIView子類。稱它們爲viewA和viewB。 UIScrollView被限制爲水平滾動/縮放。 ViewA和ViewB被排列成水平條,一個在另一個之上。 viewA和viewB的範圍超出了scrollView的範圍,並且在滾動/縮放過程中正常顯示。到現在爲止還挺好。如何在UIScrollView中實現一個可拖動的UIView子類?

這裏是事情有點棘手的地方:我需要能夠垂直拖動viewB和水平。我寧願不將viewB嵌套在它自己的scrollView中。

我的問題是,什麼是正確的方式來實現簡單的垂直滾動viewB同時仍然有關於scrollView的行爲正確嗎?我是否簡單地實現了四種觸摸順序方法:在viewB中開始/移動/結束/取消,操作viewB的變換矩陣,並且我處於清晰狀態還是對它更感興趣?

在此先感謝。

乾杯, 道格

+0

爲什麼你不希望ViewB是在其自身的滾動視圖? – NSResponder 2009-10-26 21:58:59

+0

總之:複雜性。一個scrollView是爲我的需要矯枉過正。 – dugla 2009-10-27 17:39:21

回答

0

嗯,關於你的給定的場景,我會解決這個問題如下:

首先創建一個UIView子類,包括nessecary功能,這個人是在收到您的阻力-actions。雖然這是可拖動的,但應該禁用UIScrollView的滾動。 標題:

#import <UIKit/UIKit.h>; 

@interface ViewB : UIView 
{ 
} 

@end 

實現:

#import "ViewB.h" 

@implementation DragView 
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 0.5; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = NO; 
} 

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint loc = [touch locationInView:self.superview]; 
    self.center = loc; 
} 

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 1.0; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = YES; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 1.0; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = YES; 
} 

// Further methods... 

@end 
相關問題