Я пытаюсь переместить UIView
по экрану.Я пытаюсь реализовать подкласс UIDynamicBehavior
UIGravityBehavior
и UIPushBehavior
оба учитывают плотность, скорость и трение. Я попытался реализовать свое собственное динамическое поведение, которое игнорирует эту физику.
Мой UIDynamicBehavior
подкласс и некоторые основные реализации
// MYDynamicBehavior.h
@interface MYDynamicBehavior : UIDynamicBehavior
- (void)addItem:(id<UIDynamicItem>)item;
- (void)removeItem:(id<UIDynamicItem>)item;
@end
// MYDynamicBehavior.m
@interface MYDynamicBehavior()
@property (strong, nonatomic) NSMutableArray *items;
@end
@implementation MYDynamicBehavior
- (void (^)(void))action
{
__weak MYDynamicBehavior *weakSelf = self;
for (UIView *item in weakSelf.items)
item.center = CGPointMake(item.center.x + 10.0, item.center.y);
}
- (instancetype)init
{
if (self=[super init]) {
__weak MYDynamicBehavior *weakSelf = self;
weakSelf.action = ^{
for (UIView *item in weakSelf.items)
item.center = CGPointMake(item.center.x + 10.0, item.center.y);
};
}
return self;
}
- (void)addItem:(id<UIDynamicItem>)item
{
[self.items addObject:item];
}
@end
// ViewController.m
// #includes
@interface ViewController()
@property (strong, nonatomic) UIDynamicAnimator *ani;
@property (strong, nonatomic) UIView *kin;
@property (strong, nonatomic) MYDynamicBehavior *skywalk;
@end
@implementation ViewController
…
- (void)viewDidLoad
{
[super viewDidLoad];
self.ani = [[UIDynamicAnimator alloc] init];
self.kin = // some view
self.skywalk = [[MYDynamicBehavior alloc] init];
[self.ani addBehavior:self.skywalk];
[self.skywalk addItem:kin];
}
@end
Я пытаюсь воссоздать это из памяти, я думаю, что основы здесь
Во всяком случае, это мое впечатление от документации, что свойство action - это то, где мне нужно реализовать мою анимацию. Однако не кажется, что мое действие черное когда-либо называется.
This самый близкий я пришел к решению, но я до сих пор не решил эту проблему.
Что мне не хватает? Почему мой подкласс UIDynamicBehavior
не работает?