У меня есть приложение, которое использует метод обратного вызова C для получения мультитач-информации с трекпада macbook. Вот усеченная версия того, как я передаю эти данные пользователю:
в MT2AppDelegate.h:
#import "MyView.h"
@interface MT2AppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSTextField *L1;
IBOutlet MyView *MTView;
}
@property (retain, nonatomic) IBOutlet MyView *MTView;
@property (retain, nonatomic) IBOutlet NSTextField *L1;
в MT2AppDelegate.m:
#import "etc. etc."
static MT2AppDelegate *sharedWithCAppDelegateReference;
@implementation MT2AppDelegate
@synthesize L1, MTView;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
sharedWithCAppDelegateReference=self;
[L1 setStringValue:@"Hello"];//this works
[MTView drawRect2];//this also works
MTDeviceRef dev = MTDeviceCreateDefault();
MTRegisterContactFrameCallback(dev, callback);
MTDeviceStart(dev, 0);
}
int callback( int example, float etc) {
[sharedWithCAppDelegateReference->L1 setStringValue:@"hello"];//this works
[sharedWithCAppDelegateReference->MTView drawRect2];//this does NOT work
return 0;
}
Так что по какой-то причине использование функции на одном IBOutlet работает из C просто отлично, в то время как другая ничего не делает. Те же две функции обе работают в target-c. Я также не могу вызвать функцию из делегата приложения внутри C. Например, [sharedWithCAppDelegateReference setPoint];
ничего не делает.
Кроме того, если есть более элегантный способ сделать это (я уверен, что есть), я весь слух. Здесь происходит то, что эта функция обратного вызова постоянно обновляется, сообщая информацию о позициях пальцев на трекпаде. Я хочу анимировать вид, чтобы он визуально отображал местоположение пальца. Приложение FingerMgmt отлично справляется с этой задачей, но исходный код недоступен.
В настоящее время у меня есть делегат приложения с функцией обратного вызова внутри него и другой класс («MyView»), который является классом представления в окне моего приложения. Делегат приложения связан с представлением через IBOutlet в конструкторе интерфейса, и я планирую передать ему команды, чтобы обновить местоположение овалов, представляющих пальцы. Но опять же, это не работает для меня.