我正在尝试对这个基于UIView块的动画代码进行精确的"翻译" :
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
someView.frame = CGRect(0, 100, 200, 200);
}
completion:nil];
Run Code Online (Sandbox Code Playgroud)
而是使用CABasicAnimation.
我完全知道frame属性实际上是底层的position,bounds和anchorPoint的组合,如下所述:http://developer.apple.com/library/mac/#qa/qa1620/_index .html
...我已经做了这样的解决方案,使用两个CABasicAnimations设置位置,一个用于边界,它适用于那个视图.
但问题是我在视图中有子视图.someView有一个UIScrollView类型的子视图,我在其中放置了另一个UIImageView类型的子视图.UIScrollView子视图将autoresizingMask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight.如果我使用基于UIView块的版本,这一切都能完美运行,但是当我尝试使用CABasicAnimations时,子视图开始出现意外行为(即调整大小不正确的宽度).所以当使用CABasicAnimations时,似乎autoresizingMask无法正常工作.我还注意到子视图没有接收到对setFrame的调用:尽管在更改图层位置和边界后父视图的frame属性确实发生了变化.
这就是为什么我想知道用CABasicAnimation复制的正确代码是什么,当使用UIView的animateWithDuration方法时会发生什么.
我正在尝试创建一个与苹果照片应用程序完全相同的图像查看器.但是现在我只对单个图像行为感兴趣.
我已经在UIScrollView中放置了一个UIImageView并设法处理了几乎所有东西,这就是如果我放大图像的一部分(例如肖像图像),然后在横向旋转设备,该部分显示为旋转在左上角而不是中心.
让我试着说明一下.这就是我现在拥有的:

这就是我想要发生的事情:

基本上我相信我知道我怎么做,但它似乎涉及比它应得的更多的编码.也许我错过了一些简单的属性,我可以设置为获得这种期望的行为.
任何提示,任何人?
我只是CABasicAnimation为shadowPath属性配置,这让我很好奇:
shadowAnimation.toValue = (id)newShadowPath.CGPath;
Run Code Online (Sandbox Code Playgroud)
[注意:shadowAnimation是一个CABasicAnimation对象,newShadowPath是一个UIBezierPath对象]
这是有效的,Xcode中没有错误/警告.但是,如果我这样写:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
Run Code Online (Sandbox Code Playgroud)
这将无法编译,抛出此警告消息:
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
Run Code Online (Sandbox Code Playgroud)
所以它需要我输入它:
shadowAnimation.toValue = (__bridge id)test;
Run Code Online (Sandbox Code Playgroud)
现在为什么会这样呢?当我只使用(id)newShadowPath.CGPath时,为什么我在初始示例中没有得到相同的错误; ?__bridge不管Xcode没有检测到任何问题,将投射放在那里也是正确的吗?或者我错过了这里有什么区别?
我正在研究/etc/init.d/中当前Debian 7.4.0 wheezy发行版中的System V init脚本(但它也出现在其他的,之前的版本中).几乎所有这些(来自现有服务)在该文件夹中找到,基本上是一个空行,只包含冒号(:)符号.即使是为了编写自己的init脚本而在那里找到的'骨架'模板文件也是如此.这是代码末尾的复制/粘贴:
esac
:
Run Code Online (Sandbox Code Playgroud)
(那是案例陈述的结尾,然后是文件的结尾)
有趣的是,没有退出0或退出$?调用,除了只在case语句中的某些条件,否则将被调用,所以看起来好像冒号是一种替代它?完整的骨架文件代码在这里:https://gist.github.com/ivankovacevic/9917139
结肠怎么可能?为什么?
我一直在分析在Mac OS X上获得CPU温度和CPU风扇速度所需的代码.有很多例子.这是其中之一:
https://github.com/lavoiesl/osx-cpu-temp
现在,在smc.h文件中定义了一些奇怪的(对我来说)数据类型:
#define DATATYPE_FPE2 "fpe2"
#define DATATYPE_SP78 "sp78"
Run Code Online (Sandbox Code Playgroud)
这些是后来Apple的IOKit在内存中作为返回值写入的数据类型,然后需要将其转换为可用的内容.代码的作者就是这样(请注意,他在评论中写了一个拼写错误的fp78而不是sp78):
// convert fp78 value to temperature
int intValue = (val.bytes[0] * 256 + val.bytes[1]) >> 2;
return intValue / 64.0;
Run Code Online (Sandbox Code Playgroud)
我觉得令人难以置信的是,我无法找到关于这两个代码fpe2和sp78的任何注释,旁边是用于访问Mac上的临时和扇形读数的非官方代码示例.
这里有没有人知道如何自己解决这些问题?关于这些代码?!基本上,有人可以指出我有关此的一些文档和/或在这里解释这些数据类型是什么?
objective-c ×3
ios ×2
bash ×1
c ×1
dash-shell ×1
debian ×1
init.d ×1
iokit ×1
iphone ×1
linux ×1
macos ×1
types ×1
uiimageview ×1
uiscrollview ×1