Я мог бы придумать два способа сделать это. Сначала Наблюдение значения ключа через следующее:
[self.toggle addObserver: inspector
forKeyPath: @"frame"
options: NSKeyValueObservingOptionNew
context: NULL];
Я не уверен, что свойство frame
совместимо с Key-Value Coding.
Или, и это то, что я бы порекомендовал, вы можете:
(1) Создайте протокол [Prefix] ToggleViewLocationDelegate и добавьте свойство locationDelegate в свой контроллер представления / представления, например:
// YourViewOrViewControllerClass.h
// ...
@class YourViewOrViewControllerClass
@protocol [Prefix]ToggleViewLocationDelegate
- (void) toggleViewDidChangeFrame: (UIView*) toggleView;
@end
@class YourViewOrViewControllerClass
@property (nonatomic, assign) id<[Prefix]ToggleViewLocationDelegate> locationDelegate;
...
@end
(2) Обеспечение заинтересованности класса в изменении координат в соответствии с протоколом, и
(3) В методе touchesMoved:withEvent:
сообщите locationDelegate
следующим образом:
- (void) touchesMoved: (NSSet*) touches
withEvent: (UIEvent*) event
{
UITouch* touch = [touches anyObject];
if (touch.view == toggle)
{
/* Fetch the new touch location */
CGPoint location = [touch locationInView: self.view];
/* Set the toggle's location */
CGPoint newLocation = CGPointMake(toggle.center.x, location.y);
toggle.center = newLocation;
/* Inform the delegate when applicable */
if (self.locationDelegate != nil)
{
[self.locationDelegate toggleViewDidChangeFrame: toggle];
}
}
}