为什么我的 class 来自 UIDynamicAnimator 的继承不能使用 addChildBehavior
Why my class Inheritance from UIDynamicAnimator can not use addChildBehavior
我正在学习 ios 斯坦福 CS193P,第 8 讲有问题
我从 UIDynamicAnimator 创建了一个名为 DropItBehavior 的继承,但我不能使用 UIDynamicAnimator 方法 addChildBehavior,xcode 警告像 "No visible @interface for "DropItBehavior" declares the selector 'addChildBehavior'
这是.h文件
#import <UIKit/UIKit.h>
@interface DropItBehavior : UIDynamicAnimator
- (void)addItem:(id <UIDynamicItem>)item;
- (void)removeItem:(id <UIDynamicItem>)item;
@end
这是.m文件
#import "DropItBehavior.h"
@interface DropItBehavior()
@property (strong, nonatomic) UIGravityBehavior *gravity;
@property (strong, nonatomic) UICollisionBehavior *collision;
@end
@implementation DropItBehavior
- (instancetype)init
{
self = [super init];
[self addChildBehavior:self.gravity];//Here is the Xcode warning"No visible @interface for "DropItBehavior" declares the selector 'addChildBehavior"
return self;
}
- (instancetype)init
{
self = [super init];
[self addChildBehavior:self.gravity];
return self;
}
- (UIGravityBehavior *)gravity
{
if (!_gravity) {
_gravity = [[UIGravityBehavior alloc] init];
_gravity.magnitude = 0.9;
}
return _gravity;
}
- (UICollisionBehavior *)collision
{
if (!_collision) {
_collision = [[UICollisionBehavior alloc] init];
_collision.translatesReferenceBoundsIntoBoundary = YES;
}
return _collision;
}
- (void)addItem:(id <UIDynamicItem>)item
{
[self.gravity addItem:item];
[self.collision addItem:item];
}
- (void)removeItem:(id <UIDynamicItem>)item
{
[self.gravity removeItem:item];
[self.collision removeItem:item];
}
@end
查看 docs,没有方法 -[UIDynamicAnimator addChildBehavior:]
,也不在您的子类中。
然而,UIDynamicBehavior
确实如此。
我会仔细检查您是否对正确的对象进行了子类化。
这是因为 addChildBehavior
是 UIDynamicBehavior
的方法,而不是 UIDynamicAnimator
的方法。根据 CS-193P 的讲义,您的 DropIt class 应该继承自 UIDynamicBehavior
而不是:
@interface DropItBehavior : UIDynamicBehavior
我正在学习 ios 斯坦福 CS193P,第 8 讲有问题
我从 UIDynamicAnimator 创建了一个名为 DropItBehavior 的继承,但我不能使用 UIDynamicAnimator 方法 addChildBehavior,xcode 警告像 "No visible @interface for "DropItBehavior" declares the selector 'addChildBehavior'
这是.h文件
#import <UIKit/UIKit.h>
@interface DropItBehavior : UIDynamicAnimator
- (void)addItem:(id <UIDynamicItem>)item;
- (void)removeItem:(id <UIDynamicItem>)item;
@end
这是.m文件
#import "DropItBehavior.h"
@interface DropItBehavior()
@property (strong, nonatomic) UIGravityBehavior *gravity;
@property (strong, nonatomic) UICollisionBehavior *collision;
@end
@implementation DropItBehavior
- (instancetype)init
{
self = [super init];
[self addChildBehavior:self.gravity];//Here is the Xcode warning"No visible @interface for "DropItBehavior" declares the selector 'addChildBehavior"
return self;
}
- (instancetype)init
{
self = [super init];
[self addChildBehavior:self.gravity];
return self;
}
- (UIGravityBehavior *)gravity
{
if (!_gravity) {
_gravity = [[UIGravityBehavior alloc] init];
_gravity.magnitude = 0.9;
}
return _gravity;
}
- (UICollisionBehavior *)collision
{
if (!_collision) {
_collision = [[UICollisionBehavior alloc] init];
_collision.translatesReferenceBoundsIntoBoundary = YES;
}
return _collision;
}
- (void)addItem:(id <UIDynamicItem>)item
{
[self.gravity addItem:item];
[self.collision addItem:item];
}
- (void)removeItem:(id <UIDynamicItem>)item
{
[self.gravity removeItem:item];
[self.collision removeItem:item];
}
@end
查看 docs,没有方法 -[UIDynamicAnimator addChildBehavior:]
,也不在您的子类中。
然而,UIDynamicBehavior
确实如此。
我会仔细检查您是否对正确的对象进行了子类化。
这是因为 addChildBehavior
是 UIDynamicBehavior
的方法,而不是 UIDynamicAnimator
的方法。根据 CS-193P 的讲义,您的 DropIt class 应该继承自 UIDynamicBehavior
而不是:
@interface DropItBehavior : UIDynamicBehavior