2015-10-17 58 views
0

我測試使用UISlider一個UIView如在下面的示例圖像:調整大小一個UIView,但通過的drawRect繪製完成後也改變大小

enter image description here

enter image description here

我有一個自定義的UIView繪製灰色方塊的黃色背景,drawRect方法是這樣的:

-(void)drawRect:(CGRect)rect{ 

    NSLog(@"Draw rect called"); 

    UIBezierPath* squarePath = [UIBezierPath bezierPathWithRect: CGRectMake(10, 10, 100, 100)]; 
    [UIColor.grayColor setFill]; 
    [squarePath fill]; 
} 

而我的幻燈片的方法改變價值:

- (IBAction)changeValue:(id)sender { 

    CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, self.slider.value, self.slider.value); 
    self.tableView.transform = transform; 
    [self.tableView setNeedsDisplay]; 



} 

我不明白爲什麼廣場越來越大。我注意到每次移動滑塊時都會調用drawRect。如果發生這種情況,爲什麼方形尺寸會發生變化?它不應該保持相同的大小,只是框架與左上角的廣場一起增長?

我的第二個問題是,我將如何更改代碼,以便框架增長並且圖形大小保持不變?我問這個問題,因爲實際上我希望繪圖大小在drawRect中使用我自己的代碼進行動態更改。

任何指針將非常感激!謝謝!

回答

2

正方形的大小改變的原因是因爲你已經改變了它。轉換不僅影響視圖的框架,他們會影響內容。正方形正在以其恆定大小(100x100)繪製到上下文中,然後該變形在渲染之前將其拉伸。

它沒有向右和向下擴展的原因是因爲默認情況下,變換的錨點是邊界的中心。因此它會從中心向外擴展。從文檔:

的變換的原點是中心屬性的值...

轉換不打算用來簡單地擴展您的幀的寬度和高度。 frame屬性是爲此。只需將視圖的框架存儲在一個變量中,更改其寬度和高度,然後將其設置回來。在您的drawRect:代碼中,您可以檢查給予您的矩形的尺寸,並使您的方形的寬度/高度爲此的百分比。