2013-01-23 23 views
1

harlanhaskins寫道:編程添加子視圖不與其他觀點進行互動,但XIB添加視圖運行良好

我在viewDidLoad中programmaticaly增加了一個名爲userSlider觀點:

self.userSlider = [[UserSliderView alloc] initWithFrame:CGRectMake(0, -120, 320, 155)]; 
    [self.userSlider setUser:user]; 
    [self.userSlider configureView]; 
    [self.view addSubview:self.userSlider]; 

而且叫的tableview gameTableView。

我原本添加userSlider到廈門國際銀行作爲一個自定義視圖(因爲UserSlider都有自己的XIB),當我實現了這些觸摸方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch *touch = (UITouch*)[touches anyObject]; 

start = [touch locationInView:self.view].y; 
} 



-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

if(start < 0) 

{ 

    return; 

} 

UITouch *touch = (UITouch *)[touches anyObject]; 

CGFloat now = [touch locationInView:self.view].y; 

CGFloat diff = now - start; 

sliderDirectionIsUp = diff < 0; //sliderDirectionIsUp is a BOOL 

if ((self.userSlider.frame.origin.y == 0) && ((now < 120) || (now > 155))) { 

    return; 

} 

float newCenterY = self.userSlider.center.y + diff; 

if (newCenterY < roundf(self.userSlider.frame.size.height/2)) { 

    self.userSlider.center = CGPointMake(self.userSlider.center.x, newCenterY); 

    CGRect tableViewFrame = self.gameTableView.frame; 

    tableViewFrame.origin.y += diff; 

    tableViewFrame.size.height -= diff; 

    [self.gameTableView setFrame:tableViewFrame]; 

} 

start = now; 

} 



-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

{ 

CGRect tableViewFrame = self.gameTableView.frame; 

if (sliderDirectionIsUp) 

{ 

    tableViewFrame.origin.y = 28; 

    tableViewFrame.size.height = (self.view.frame.size.height - tableViewFrame.origin.y); 

    //animate userSlider out of visible area 

    [UIView animateWithDuration:.3 animations:^{ 

     self.userSlider.center = CGPointMake(self.userSlider.center.x, -roundf(self.userSlider.bounds.size.height/2.) + 35); 

     [self.gameTableView setFrame:tableViewFrame]; 

    }]; 

} 

else if(start >= 0) 

{ 

    tableViewFrame.origin.y = (self.userSlider.frame.size.height - 7); 

    tableViewFrame.size.height = (self.view.frame.size.height - tableViewFrame.origin.y); 

    //animate userSlider with top to mainviews top 

    [UIView animateWithDuration:.3 animations:^{ 

     self.userSlider.center = CGPointMake(self.userSlider.center.x, roundf(self.userSlider.bounds.size.height/2.) - 0.5); 

     [self.gameTableView setFrame:tableViewFrame]; 

    }]; 

} 

} 

那麼這兩種觀點會提出我多想他們至。

但現在當我編程方式添加它,突然的tableView不會,除非我移動它之後的區域內挖掘改變。這真的很奇怪。

任何想法?

+0

如果移動這4行代碼中viewDidLoad中以viewWillAppear中會發生什麼? –

+0

什麼都沒有。好笑的是,雖然,當視圖不會被添加作爲一個子視圖,該調整的tableView精... –

回答

0

如果您userSlider`s框架

CGRectMake(0, -120, 320, 155) 

我懷疑你的userSlider可以接收發送者的事件。因爲如果UIControl`s幀走出上海華盈的,它可能不會收到發件人事件(外部部分)。你可以設置框架

CGRectMake(0, 0, 320, 155) 

有一個嘗試。

+0

它得到事件的罰款,並在userSlider我的水龍頭移動,就像我想它。但的tableView不動,除非我120和155之間挖掘_after_它被推倒...... –

+0

@HarlanHaskins你想如果120和155之間的權利拍了拍桌子,只動? –

+0

Lemme進一步解釋一下。 http://imgur.com/a/OkeSh 視圖被從(相對於本身)從0到隱藏120(垂直地)。當你拉下它時,它會移動中心。它也應該調整tableView的大小和原點。 –

相關問題