我从github下载了facebook开源代码pop.但所有头文件都是这样导入的:.我应该如何处理项目设置以在我的项目中支持这样的导入文件.我知道我可以通过替换all来运行它,但我会像pop样本项目一样使用开源.#import <POP/POPAnimatableProperty.h>#import <POP/XXX.h>#import XXX.h
请注意,这是与Mac OS X(NSView)相关的问题.
我正在尝试使用Facebook的POP动画从中心扩展NSView(到其大小的75%),然后再回到100%,但是我无法让它工作.鉴于kPOPLayerScaleXY似乎不起作用,我做了以下但是这给了我不正确的结果(因为它似乎从左上角向下缩小,而当zoomIn它为假时,它变得太大:
CGRect baseRect = CGRectMake(0, 0, 30, 24);
CGFloat scale = (zoomIn) ? 0.75 : 1.0;
CGFloat x = baseRect.origin.x;
CGFloat y = baseRect.origin.y;
CGFloat width = baseRect.size.width;
CGFloat height = baseRect.size.height;
if (zoomIn) {
width -= floorf((1.0 - scale) * width);
height -= floorf((1.0 - scale) * height);
x += floorf((width * (1.0f - scale)) / 2);
y += floorf((height * (1.0f - scale)) / 2);
}
CGRect scaleRect = …Run Code Online (Sandbox Code Playgroud) 我像往常一样设置和自定义UINavigationController's导航栏viewWillAppear:.然后我以0.6的间隔进行NSTimer射击viewDidLoad.此计时器触发我的动画代码.
我正在使用Facebook的POP框架,我想要做的就是使用以下代码稍微改变图层的y位置并弹回一点:
// Move object up
POPSpringAnimation *positionAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY];
positionAnimation.toValue = @(self.myView.frame.origin.y - 5);
positionAnimation.springBounciness = 20;
positionAnimation.velocity = @(2000);
[self.myView.layer pop_addAnimation:positionAnimation1 forKey:@"positionAnimation"];
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这总是会导致视图位于下方UINavigationBar.如果我切换到以下代码,视图将转到正确的位置:
POPSpringAnimation *frameAnimation = [POPSpringAnimation animation];
frameAnimation.property = [POPAnimatableProperty propertyWithName:kPOPViewFrame];
frameAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(12, 24, 91, 116)];
[self.myView.layer pop_addAnimation:secondFrameAnimation forKey:@"frameAnimation"];
Run Code Online (Sandbox Code Playgroud)
问题是,如果我尝试向frameAnimation使用该velocity属性添加任何反弹,应用程序崩溃,我收到以下错误:
'Invalid value', reason: '2000 should be of type CGRect'
Run Code Online (Sandbox Code Playgroud)
如果我将我的positionAnimation代码放入一个不使用UINavigationController导航栏的新项目中,一切正常,视图会动画到正确的y位置.唯一的另一个区别是我当前的项目是从一个nib/xib文件加载这个视图,但一切都是在新的项目中以编程方式完成的.我不确定这与它有什么关系.
那么如何使用带导航栏的导航控制器,还能成功使用位置动画?
编辑:
我现在让动画正常工作,但仍然遇到一些非常奇怪的行为.以下是成功移动视图而不是将其置于以下位置的代码UINavigationBar …
使用Coreanimation框架时,我可以设置动画重复.我想设置一个"吸引注意"模式的按钮,这将使他成长和缩小一小部分以引起用户的注意.
我已经通过完成块链接了增长和缩小动画.问题是我是否以及如何从第二个动画的完成块开始第一个动画.
我确实收到了以下有意义的警告.这个问题的优雅解决方案是什么?我不喜欢为这样的东西创造计时器.
在此块中强烈捕获'scaleAnimation'可能会导致保留周期
- (void)attractAttention:(BOOL)flag{
_attractAttention = flag;
float resizeValue = 1.2f;
// Grow animation
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.fromValue = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
scaleAnimation.completionBlock = ^(POPAnimation *anim, BOOL finished) {
// Grow animation done
POPSpringAnimation *scaleAnimationDown = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimationDown.fromValue = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
scaleAnimationDown.toValue = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
scaleAnimationDown.completionBlock = ^(POPAnimation *anim, BOOL finished) {
// Shrink animation done
if (_attractAttention) {
[self.layer pop_addAnimation:scaleAnimation forKey:@"scaleUpAnimation"];
}
};
[self.layer pop_addAnimation:scaleAnimationDown forKey:@"scaleDownAnimation"];
}; …Run Code Online (Sandbox Code Playgroud)