作为测试,我做了一个布局,在垂直线上显示单元格,另一个在水平布局中显示它们.当我把[collectionView setCollectionViewLayout:layout animated:YES];它称为两个位置之间的动画非常干净.
现在,我喜欢做的是有各方面的意见做了几个旋转,扭曲,最后到达目的地之前的屏幕(可能使用CAKeyframeAnimations)左右翻转,但我不能找到一个好地方挂钩这一点.
我尝试了子类化UICollectionViewLayoutAttributes以包含动画属性,然后applyLayoutAttributes:在UICollectionViewCell我正在使用的重写方法中设置这些动画.这可行...除了它似乎只在布局转换完成后才会发生.如果我想使用它,我必须让布局不要立即改变对象的当前位置,只有在它到达代码的这个apply属性部分之后,这似乎很多工作......
或者我可以继承UICollectionView和覆盖setCollectionViewLayout:animated:,但在布局之间看起来似乎也有很多状态.无论这些optins的似乎是正确的,因为有这样的动画细胞的添加/删除一个简单的方法中的布局.我觉得应该有类似的东西挂钩布局之间的动画.
有谁知道获得我想要完成的目标的最佳方法?
这是一个例子:
注意所有的红色div是如何相同height而且有padding-top:100%;,但它们A和B有不同的填充大小......并且看起来父级的宽度改变了这个值(注意C改变height了父级,但是没有不要改变填充物.
为什么padding以这种方式与宽度相关?
编辑:由于历史原因,如果jsfiddle消失,我在我的例子中使用的代码如下...
.outer {
background-color: green;
height: 300px;
width: 70px;
float: left;
margin-right: 10px;
}
.middle {
background-color: red;
height: 100px;
width: 50px;
padding-top: 100%;
}
.inner {
background-color: blue;
height: 3px;
width: 100%;
}Run Code Online (Sandbox Code Playgroud)
<div class='outer'>
<div class='middle'>
A
<div class='inner'>
</div>
</div>
</div>
<div class='outer' style='width:100px'>
<div class='middle'>
B
<div class='inner'>
</div>
</div>
</div>
<div class='outer' style='height:400px'>
<div class='middle'>
C
<div class='inner'>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
今天下午我正在玩一个想法,偶然发现了一些我不太懂的东西.基本上我在这个实验中想要实现的是以某种方式知道每次创建一个字符串(以供以后使用,例如在某种DSL中).以下适用于通过String.new创建的任何String:
class ::String
class << self
alias_method :new_orig, :new
def new(*args)
o = new_orig(*args)
puts "newing '#{o}'"
o
end
end
alias_method :initialize_orig, :initialize
def initialize(*args)
initialize_orig(*args)
puts "initializing '#{self}'"
end
end
Run Code Online (Sandbox Code Playgroud)
例如
irb > String.new("foo")
initializing 'foo'
newing 'foo'
=> "foo"
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚当你使用文字时如何创建一个String对象.例如,为什么不进行相同的初始化和设置:
irb > "literal string"
=> "literal string"
Run Code Online (Sandbox Code Playgroud)
我意识到当字符串是文字时,编译器正在做某事或其他不同的事情,但它不是需要初始化,只是作为一个功能齐全的对象?是否有任何技巧可以用来确定何时使用文字创建字符串,或者这是不可能做到的?
谢谢!
我试着子类UICollectionView和压倒一切的touchesBegan:withEvent:和hitTest:WithEvent:,当我触摸一个细胞都这些方法触发.但是,如果我触摸单元格之间的空间,则根本不会发生任何事情.这是我创造的:
@interface WSImageGalleryCollectionView : UICollectionView
@end
Run Code Online (Sandbox Code Playgroud)
..和..
@implementation WSImageGalleryCollectionView
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Touches began");
[super touchesBegan:touches withEvent:event];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"Hit test reached");
return [super hitTest:point withEvent:event];
}
@end
Run Code Online (Sandbox Code Playgroud)
注意:手势识别器似乎有完全相同的问题,这就是为什么我尝试使用touchesBegan进行更低级别的操作.
SCNNode使用a进行旋转SCNVector4,其具有角度(w)和该角度如何应用于每个轴(x,y,z)的大小.例如,要围绕x轴旋转45度,我会创建SCNVector4如下:
SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))
Run Code Online (Sandbox Code Playgroud)
我想做的是在所有三个轴上旋转它,例如:x轴为45度,y轴为15度,z轴为-135度.有谁知道计算决赛的数学SCNVector4?
我经常看到Javascript程序员做这样的事情:
function(index, input) {
var $input;
$input = $(input);
return $input.data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)
虽然我想要做的是这样的事情:
function(index, input) {
var $input = $(input);
return $input.data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)
或者在这个特殊情况下,实际上这个:
function(index, input) {
return $(input).data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)
在一行上声明'var',然后再分配给它们有什么价值?在我看来,添加额外的行只会导致可能的问题(例如,有人可能忘记添加'var'并意外地产生全局变量).那么为什么这样呢?
这只是某种编码约定(可读性,可能吗?),还是有一些关于JavaScript如何在内部工作的一些繁琐的事情,这使得这个结构在某种程度上更有效?
css ×1
css3 ×1
internals ×1
ios ×1
ios6 ×1
javascript ×1
math ×1
objective-c ×1
ruby ×1
scenekit ×1