QuartzCore .layer.shadow吸收了性能.它们似乎需要在每次发生变化时重新渲染,导致一切都滞后.
Coregraphics渐变(用于单向阴影) - 看起来不正确.如果你的渐变从0.3 alpha变为0,它会产生一些奇怪的效果,你可以"看到"它停止.它看起来不漂亮或自然.也许它没有抖动,但我确信我听说过核心图形渐变.这很奇怪,我不知道.
Coregraphics阴影 - 在设置时需要一段时间来渲染,但其他方面性能很好.只是第二个你正在等待视图出现,因为它必须先渲染它的阴影,这就是问题所在.
所以我一定错过了什么.还有另一种看起来正确的方法,并且在渲染时间和性能方面都很快吗?
我正在开发这个项目,其前端是React,UIkit用于用户界面.部件之间的集成看起来很难实现.我要解释原因.有一个Modal组件,类似于
export class Modal extends Component {
static getByName = name => UIkit.modal(`[data-modal-name='${name}']`)
static show = name => {
const modal = Modal.getByName(name)
if (modal) modal.show()
}
static hide = name => {
const modal = Modal.getByName(name)
if (modal) modal.hide()
}
render() {
// a modal
}
}
Run Code Online (Sandbox Code Playgroud)
这是以这种方式使用的
export const LoginFormModal = props => (
<Modal name="login-form" className="login-form-modal" hideClose>
<LoginForm />
</Modal>
)
Run Code Online (Sandbox Code Playgroud)
在需要的地方以编程方式调用show/hide(甚至还原为redux)
Modal.hide("login-form")
Run Code Online (Sandbox Code Playgroud)
这是一个Redux动作,就像这样
export const login = credentials => {
return dispatch => { …Run Code Online (Sandbox Code Playgroud) 我意识到(文档在这里)的contentsRect属性允许我们定义用于绘图的层的多少,但我不知道坐标系是如何工作的.CALayer
似乎当宽度/高度较小时,用于内容的区域更大,反之亦然.同样,负x,y位置似乎将内容区域向下移动到右侧,这与我的直觉相反.
有人可以解释为什么会这样吗?我确信有一个很好的理由,但我认为我缺少一些图形编程背景.
我有一个UIBezierPath(曲线像'8',只有4个点),我需要制作一些CGPoint-Array.有任何想法吗?感谢名单!
编辑:
我有这样的bezier初始化
-(void) initBezier
{
theBezierPath = [UIBezierPath bezierPath];
[theBezierPath moveToPoint:P(211.00, 31.00)];
[theBezierPath addCurveToPoint:P(870.00, 191.00) controlPoint1:P(432.00, -11.00) controlPoint2:P(593.00, 209.00)];
[theBezierPath addCurveToPoint:P(731.00, 28.00) controlPoint1:P(1061.95, 178.53) controlPoint2:P(944.69, 5.78)];
[theBezierPath addCurveToPoint:P(189.00, 190.00) controlPoint1:P(529.00, 49.00) controlPoint2:P(450.00, 189.00)];
[theBezierPath addCurveToPoint:P(211.00, 31.00) controlPoint1:P(-33.01, 190.85) controlPoint2:P(71.00, 37.00)];
}
Run Code Online (Sandbox Code Playgroud)
我用它动画一个物体
anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"];
anim.path = theBezierPath.CGPath;
anim.calculationMode = kCAAnimationCubicPaced;
anim.repeatCount = HUGE_VALF;
anim.duration = tme;
Run Code Online (Sandbox Code Playgroud)
我想逐个像素地(通过触摸位置)为路径上的对象设置动画.我希望对象将触摸的给定坐标"捕捉"到曲线上的最近点,以便沿着路径触摸滑动对象.
以下代码段使用GCD计算一组整数并将它们存储在数组中.
factArray = {1!,2!,... n!}其中k!表示阶乘(k)= k*(k-1)*...*2*1.
我想知道为什么我可以在块内添加对象factArray变量(NSMutableArray的实例)尽管factArray没有使用__block限定符声明.
NSUInteger n = 10;
NSMutableArray *factArray = [[NSMutableArray alloc] initWithCapacity:n];
__block NSUInteger temp = 1;
dispatch_apply(n,
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),
^(size_t s) {
NSUInteger w;
temp *= floor(s) + 1;
w = temp;
[factArray addObject:@(w)];
});
__block NSArray *sortedArray;
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
sortedArray = [factArray sortedArrayUsingComparator:^NSComparisonResult(NSNumber *n1, NSNumber *n2) {
return [n1 compare:n2];
}];
NSLog(@"%@", sortedArray);
});
Run Code Online (Sandbox Code Playgroud)
当然,如果我们添加__block限定符,此代码仍然有效.
假设我有这样的代码:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
}
[pool drain];
Run Code Online (Sandbox Code Playgroud)
请注意,此代码的目的只是展示我可以做的事情,这是我通常做的简化.因此,在每次迭代中,都会分配并初始化新的NSDate.NSAutoreleasePool是否将它们全部耗尽,或者我是否必须以这种方式在循环中添加NSAutoreleasePool:
for(unsigned int i=0;i<10;i++)
{
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
NSDate* date=[[NSDate alloc]init];
[pool drain];
}
Run Code Online (Sandbox Code Playgroud)
?
另外,我的书(mac os x的可可编程)没有提到NSAutoreleasePool,它只是这样用它:
@autoreleasepool
{
<code>
}
Run Code Online (Sandbox Code Playgroud)
我已阅读,这种方式比使用NSAutoreleasePool更有效,但如果我使用它,我得到一个语法错误:
"在节目意外'@’"
为什么呢?
我试过这样修改代码:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
[date autorelease];
}
[pool drain];
Run Code Online (Sandbox Code Playgroud)
那是对的吗?我认为保留了10个不同的对象(数到1),然后添加到自动释放池中.我没有内存泄漏吗?有没有办法用gdb检查这个对象数?
我一直在尝试向按钮添加工具提示,该提示仅在满足某些条件时显示。我正在使用uikit@3.0.0-beta.35。根据文档,我应该在beforeshow事件返回false 。
UIkit.tooltip($element, { pos: 'top' });
$element.on('beforeshow', function(){
return false;
});
if(condition){
UIkit.tooltip($element).show();
}
Run Code Online (Sandbox Code Playgroud)
问题在于该beforeshow函数由于某种原因永远不会触发。我什至尝试了UIkit文档中提到的这种语法:
UIkit.util.on($element, 'beforeshow', function () {
return false;
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些方法都不适合我。
我正在尝试将UIKit的 (3.0.0) 微调器与页面中心对齐。但不会。
我试过直接对它应用align并将其包装在这样的容器中,但没有任何效果:
<div class="uk-inline uk-margin">
<div class="uk-position-center">
<div uk-spinner></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?