【问题标题】:iOS UIKit Dynamics - unable to add bouncy behaviour for a viewiOS UIKit Dynamics - 无法为视图添加有弹性的行为
【发布时间】:2014-09-29 22:29:28
【问题描述】:

我正在尝试添加一个有弹性的行为(碰撞检测)来查看包含所有内容,如按钮和名为 ViewContent 的图像[它应该从顶部掉落并与屏幕底部碰撞/反弹]。

这是我的视图层次结构

和代码:

viewController.h

@interface LoginViewController : UIViewController <UIScrollViewDelegate, UICollisionBehaviorDelegate>

@property (weak, nonatomic) IBOutlet UIView *viewContent;

@property (nonatomic, strong) UIDynamicAnimator *animator;

@end

在情节提要中,我将 viewContent 框架设置为 (0, -568, 320, 568),所以它应该来自顶部

viewController.m

@implementation LoginViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

    UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[viewContent]];
    gravityBehavior.gravityDirection = CGVectorMake(0.0, 1.0);

    [self.animator addBehavior:gravityBehavior];

    UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[viewContent]];

    collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
    collisionBehavior.collisionDelegate = self;
    [self.animator addBehavior:collisionBehavior];

    UIDynamicItemBehavior *contentViewBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[viewContent]];
    contentViewBehavior.elasticity = 0.4;

    [self.animator addBehavior:contentViewBehavior];

结果什么也没发生。我正在关注本教程http://www.teehanlax.com/blog/introduction-to-uikit-dynamics/ 并能够在带有框架(100, 100, 100, 100) 的正方形上添加碰撞检测,但无法在具有框架(0, 0, 320, 568) 的视图上添加碰撞。

我是新手,想不通,请有任何想法/建议。

更新 按照@Fogmeister 的建议添加了笔尖视图。
我添加了一个名为 LoginView 的单独 nib 视图文件并分配了 LoginViewController 类,以便我能够从该 Nib 添加 IBOutlets 和 IBActions。

LoginViewController's ViewDidLoad 方法中刚刚在[super viewDidLoad 下方添加了这些行

self.content = [[[NSBundle mainBundle]
                 loadNibNamed:@"ViewLogin"
                 owner:self options:nil]
                firstObject];

[self.view addSubview:self.content];

其余代码保持不变,除了 initWithItems viewContent 被这个新创建的视图 self.content 替换。

【问题讨论】:

    标签: ios iphone user-interface uikit uikit-dynamics


    【解决方案1】:

    目前您不能同时使用AutoLayoutUIKit Dynamics。他们根本不一起工作。

    另外,AutoLayout 的第一条规则是不能直接更新视图的框架。所以你的self.viewContent.frame = CGRectMake = (0, -568, 320, 568); 也行不通。

    您需要对此视图执行的操作是禁用 AutoLayout 以使用 Dynamics。

    看到您正在使用情节提要,那么问题是禁用一个视图的自动布局将禁用所有视图。

    如果您只想让主视图弹跳,那么您可以在单独的 nib(或代码)中定义该视图。

    无论哪种方式,您都需要以编程方式将该视图添加到视图控制器的视图中。

    那么你的动力就会起作用。

    【讨论】:

    • 感谢您的建议。删除自动布局不是一个选项,所以我会选择单独的 nib 选项。
    • 我创建了一个单独的 nib 文件并为这个 nib 分配了相同的类,即 LoginViewController 并在 ViewDidLoad 方法中添加了这些行:self.content = [[[NSBundle mainBundle] loadNibNamed:@"ViewLogin"所有者:自我选项:nil] firstObject]; [self.view addSubview:self.content];什么也没发生 :(
    • 问题已编辑,请查看并告诉我,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多