2014-01-28 3 views
1

UIView을 화면 전체로 이동하려고합니다.UIDynamicBehavior의 서브 클래스 구현에 애 쓰고 있습니다.

UIGravityBehaviorUIPushBehavior은 모두 밀도, 속도 및 마찰과 같은 것을 고려합니다. 나는 그 물리학을 무시하는 내 자신의 동적 행동을 구현하려고했습니다.

UIDynamicBehavior 서브 클래스 I 메모리에서이 작업을 다시 시도하고

// 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 

몇 가지 기본적인 구현, 나는 기초가 여기 어쨌든

생각, 그것은 문서에서 내 인상의 그 액션 속성은 내 애니메이션을 구현해야하는 곳입니다. 그러나 나는 흑인의 행동이 부름받은 것처럼 보이지 않는다.

This 내가 해결책을 찾은 것 중 가장 가까운 것이지만 아직이 문제를 해결하지 못했습니다.

무엇이 누락 되었습니까? 내 맞춤 UIDynamicBehavior 서브 클래스가 작동하지 않는 이유는 무엇입니까?

답변

1

내가 명시 적으로이 내용의 문서를 발견하지 않았습니다, 나는 근본적인 이유를 추측 할 수없는,하지만 난 내 사용자 지정 UIDynamicBehavior 클래스가 자신의 액션 블록을 호출하는 경우 아이의 행동이있는 경우에만 것을 발견했다 거기에 적어도 하나의 항목이 추가되었습니다.

의도 한대로 작동하는 것보다 부작용이 발생한다고 생각되지만 이상하게 작동 블록을 작동시키는 것은 이상한 일입니다. 아무도 에 대한 이유를 밝힐 수 있다면 정말에 관심이 있습니다. : 1

관련 문제