2010-12-10 70 views
0

嘿,我試圖實現雙擊縮放,我試圖從蘋果的代碼ScrollViewSuite example和幾條線給我的錯誤。需要幫助CGRect和CGPoint的ios dev

第一個是

tapLocation = midpointBetweenPoints(tapLocation, [touch locationInView:touch.view]); 

它賦值說,不兼容的類型。我無法找到關於midpointBetweenPoints的很多信息,除了它比較兩個CGPoints,我相信這就是我所傳遞的信息。

二節給出了一個錯誤是

CGRect zoomRect = [self zoomRectForScale:newScale withCenter:tapPoint]; 

,這讓我無效初始化。

有誰知道我在做什麼錯?

回答

1

Both midpointBetweenPoints和zoomRectForScale:withCenter:是示例代碼的一部分,而不是iOS本身的一部分。

midpointBetweenPoints返回一個CGPoint(與關於賦值的錯誤有關),但不在任何地方的頭中聲明。在使用它的示例中,您會看到3_Tiling,它在TapDetectingView.m的第176行定義,在第54行聲明,並在118和139處使用。我的猜測是,您要麼不包含代碼在你的項目中,或者包括定義但省略聲明。 Objective-C是C的超集,所以遵循C規則。在C中,假定無法找到聲明的任何函數都返回'int'。很可能您需要添加聲明:

CGPoint midpointBetweenPoints(CGPoint a, CGPoint b); 

某處在您使用之前。

猜測,您使用zoomRectForScale:withCenter:可能是一個類似的問題。如果沒有爲Objective-C方法找到聲明,則假定它們返回'id',這是一個指向通用Objective-C對象的指針。 CGRect是一個C結構體,因此將一個指針指向它是沒有意義的。假設您已經包含RootViewController.m的第401至第416行代碼,還需要確保該聲明對調用代碼可見。在示例代碼,這是上線80實現了與以下聲明:

@interface RootViewController (UtilityMethods) 
- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center; 
@end 

聲明添加那樣的源文件內是近似在Objective-C私有方法的一種方式。如果你想讓它公開,你可以將它添加到適當的接口聲明中。