2012-04-25 74 views
0

我對Objective-C非常陌生。我試圖編寫一個方法,我創建一個包含特定大小的圖像文件的UIImageView。將值傳遞給方法參數來創建一個CGRect

這裏是我的方法:

- (void)setImageViewElements:(UIImageView *)imageViewName : (NSString *)imageName : (NSInteger)topX : (NSInteger)topY : (NSInteger)imageWidth : (NSInteger)imageHeight 
{ 
    imageViewName = [[UIImageView alloc] initWithFrame:CGRectMake(topX, topY, imageWidth, imageHeight)]; 
    [imageViewName setImage:[UIImage imageNamed:imageName]]; 
    [self.view addSubview:imageView]; 
} 

Xcode中拋出這個警告的方法: 衝突的參數類型實行 'setImageViewElements ::::::': 'CGFloat的*'(又名 '浮動*' )與 'NSInteger的'(又名 'INT')

我想這樣稱呼它:

[self setImageViewElements:myImageView :@"myImage.png" :150 :532 :112 :82]; 

Xcode中拋出這個警告呼叫: 指針轉換不兼容的整數發送'int'到類型'CGFloat *'(aka'float *')的參數的指針轉換;

我試着改變參數來浮動,CGFloat和int,但我得到相同的錯誤變化。

任何幫助,將不勝感激。

感謝 莫里

回答

2

「衝突參數類型:

您可以通過只製作方法採取CGRect參數也使這更易於閱讀:

- (void)prepareImageView:(UIImageView *)imageView withImageName:(NSString *)name frame:(CGRect)frame; 

然後您可以這樣調用。 ..「表示.h文件中的方法簽名與.m文件中的方法簽名不匹配。也許你的.h仍然有一箇舊版本使用CGFloat

作爲一個方面的建議,爲什麼不傳遞「更大」的對象和結構而不是單獨的圖像名稱,x,y,寬度和高度參數?喜歡的東西:

- (void) setImageViewElements:(UIImageView *)imageViewName 
        withImage:(UIImage *)image 
         inFrame:(CGRect)rect 

你可以這樣稱呼它:

[self setImageViewElements:myImageView 
       withImage:[UIImage imageNamed:@"myImage.png"] 
        inFrame:CGRectMake(150, 532, 112, 82)]; 

使用命名參數通常被認爲是良好的作風了。

0

你的頭文件中有此方法至少有一個CGFloat *,其中在定義你有NSInteger聲明。

編譯器在關於該衝突的第一個警告中抱怨。第二個警告是因爲編譯器使用頭中的版本來生成代碼,並且它認爲您希望它使用整數作爲指向CGFloat的指針,這不是一個好主意。

這裏有兩個問題。首先,參數CGFloat不需要是指針。這些是原始類型,而不是對象。其次,聲明與定義之間的衝突。第三,您的方法名稱缺少參數的標籤,這是合法的,但與已建立的樣式完全相反,並且很難閱讀。三個問題。

聲明:

- (void)prepareImageView:(UIImageView *)imageView withImageName:(NSString *)name originX:(CGFloat)topX originY:(CGFloat)topY width:(CGFloat)width height:(CGFloat)height; 

確保定義看起來是一樣的,特別是其中的參數類型。在實施

[self prepareImageView:myImageView withImageName:@"myImage.png" frame:(CGRect){150, 532, 112, 82}];