Нужна помощь с CGRect и CGPoint для IOS Dev

Эй, я пытаюсь реализовать масштабирование двойным касанием, и я пытаюсь работать с кодом из примера Apple ScrollViewSuite, и несколько строк дают мне ошибки.

Первый

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

И это говорит о несовместимых типах в присваивании. Я не смог найти много информации о midpointBetweenPoints, кроме того, что он сравнивает две CGPoints, и я верю, что именно это я передаю.

Второй раздел, который дает ошибку

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

И это дает мне неверный инициализатор.

Кто-нибудь знает, что я делаю не так?

1 ответ

И midpointBetweenPoints, и zoomRectForScale:withCenter: являются частью примера кода, а не частью самой iOS.

midpointBetweenPoints возвращает CGPoint (относится к ошибке при назначении), но нигде не объявлен в заголовке. Вы увидите, что в примере, в котором он используется, 3_Tiling, он определен в строке 176 TapDetectingView.m, объявлен в строке 54 и используется в 118 и 139. Я предполагаю, что вы либо не включаете Код в вашем проекте вообще, или включает в себя определение, но пропускает объявление. Objective-C является надмножеством C, поэтому следует правилам C. В C предполагается, что любая функция, для которой невозможно найти объявление, возвращает int. Вполне возможно, вам нужно добавить объявление:

CGPoint midpointBetweenPoints(CGPoint a, CGPoint b);

Где-то до вашего использования.

Предполагается, что использование zoomRectForScale:withCenter: может быть аналогичной проблемой. Если для методов Objective-C не найдены объявления, предполагается, что они возвращают id, который является указателем на общий объект Objective-C. CGRect - это структура C, поэтому приведение указателя на него не имеет смысла. Предполагая, что вы включили код из строк 401–416 RootViewController.m, вам также необходимо убедиться, что объявление является видимым для вызывающего кода. В примере кода это достигается в строке 80 с объявлением:

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

Объявление таких добавлений внутри исходного файла является способом аппроксимации частных методов в Objective-C. Если вы хотите, чтобы он был общедоступным, вы можете просто добавить его в собственное объявление интерфейса.

Другие вопросы по тегам