2010-04-17 34 views
0

我有一個名爲INMenuCard的UIButton的子類,我重寫了initWithFrame以包含一個活動指示器。菜單卡放置正確,但任何內部引用「框架」給我「inf,inf,0,0」這意味着我的activityIndi​​cator子視圖放置不正確。我可能會錯過什麼?爲什麼initWithFrame具有錯誤的幀值?

@implementation INMenuCard 

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 

     CGRect innerFrame = CGRectInset(frame, 50.0f, 100.0f); 
     activityIndicator = [[UIActivityIndicatorView alloc] 
          initWithFrame:innerFrame]; 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; 
     [self addSubview:activityIndicator]; 
    } 
    return self; 
} 

我實例INMenuCard用(調試顯​​示的CGRect值是正確的):

CGRect cardFrame = CGRectMake(cardX, cardStartY, cardWidth, cardHeight); 
INMenuCard *menuCard = [[INMenuCard buttonWithType:UIButtonTypeCustom] initWithFrame:cardFrame]; 
[theView addSubView:menuCard]; 
+0

CGRectInset指出「矩形是標準化的,然後應用插入參數,如果結果矩形的高度或寬度爲負值,則返回空矩形。 innerFrame的價值是什麼? – slf 2010-04-17 15:20:29

+0

謝謝slf。 innerFrame是零,inf,null(取決於正確的定義),因爲封閉幀在這一點上是零,inf,null。證實「self.frame」也是零。 – CBGrey 2010-04-17 15:23:39

回答

3

如果你要調用initWithFrame的東西,已經是init「版?

在我看來,行[INMenuCard buttonWithType:UIButtonTypeCustom]正在調用UIButton的快捷方式,爲你做[[UIButton alloc] init]

+0

我的理解是,行[INMenuCard buttonWithType:UIButtonTypeCustom]是「alloc」,然後initWithFrame正在執行「init-ing」。我已經驗證了initWithFrame正在被正確調用,而不是在對象啓動時提供相同的幀值。 – CBGrey 2010-04-17 15:31:40

+0

我找不到調用'[[[UIButton buttonWithType:] init]'的人的例子'我非常確定這個類方法返回一個'init''對象。我還看到一篇文章(http://www.blogs.abeazam.com/dev/?p=77),指出''buttonWithType'在擴展'UIButton'時不能使用,因爲它返回一個私有類。 – ongle 2010-04-17 15:39:38

+0

阿哈!謝謝Ongle。將buttonWithType改爲剛纔的分配解決了這個問題。現在我只需要弄清楚爲什麼我的按鈕的背景圖像隱藏了activityindicator子視圖......但這是一個新問題。謝謝您的幫助! – CBGrey 2010-04-17 15:46:58