2013-03-10 43 views
1

我已經添加陰影到一個UITableView(其覆蓋屏幕sfrom的第三底部 - 見隨附的屏幕截圖),使用在一個UIView類別如下: CALayer的陰影而滾動的UITableView

 
- (void) addShadow { 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds]; 
    self.layer.masksToBounds = NO; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowOpacity = 1; 
    self.layer.shadowOffset = CGSizeMake(-5,-5); 
    self.layer.shadowRadius = 20; 
    self.layer.shadowPath = path.CGPath; 
    self.layer.shouldRasterize = YES; 
} 

它顯示爲預期,但是當我將它捲起來時,影子也捲起來了。此外,表格滾動超出其上界。你能提出這裏有什麼問題嗎?如果我評論self.layer.masksToBounds = NO;,陰影消失,但表滾動是預期的。因此,問題可能在於masksToBounds左右。

Initial State

Scrolled state

+0

它看起來像影子被應用於數百次的視圖滾動 – CodaFi 2013-03-10 11:32:10

回答

2

我通過把一個相同的視圖的下面,只爲陰影解決它。不是一個乾淨的解決方案......因此我仍然樂於回答。我的代碼如下:

 
- (UIView*) addShadow { 
    UIView* backView = [[UIView alloc] initWithFrame:self.frame]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:backView.bounds]; 
    backView.layer.masksToBounds = NO; 
    backView.layer.shadowColor = [UIColor blackColor].CGColor; 
    backView.layer.shadowOpacity = 1; 
    backView.layer.shadowOffset = CGSizeMake(-5,-5); 
    backView.layer.shadowRadius = 20; 
    backView.layer.shadowPath = path.CGPath; 
    backView.layer.shouldRasterize = YES; 
    [self.superview addSubview:backView]; 
    [self.superview bringSubviewToFront:self]; 
    return backView; 
}

  • (void) removeShadow { self.layer.masksToBounds = YES; self.layer.shadowColor = nil; self.layer.shadowOpacity = 0; self.layer.shadowOffset = CGSizeMake(0,0); self.layer.shadowRadius = 0; }