在UIView动画块中,有没有办法获取当前动画的持续时间?
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
答案 0 :(得分:2)
TL; DR:使用CALayer -actionForKey :,而不是-animationForKey:
@Dimitri Bouniol的答案在动画片中受影响的二传手调用时对我不起作用。根据我的理解,原因是UIView的动画系统在开始实际动画之前设置状态(并在开始实际动画之前调用setter)。对我来说有用的是在图层上调用类似的-actionForKey:方法。返回的操作确实具有适当的持续时间设置,并且可以在他的答案中使用。CAAnimation *animation = (CAAnimation*)
[self.layer actionForKey@"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
答案 1 :(得分:1)
[CATransaction animationDuration]
是您正在寻找的
答案 2 :(得分:1)
您可以轻松获得当前动画。例如,设置CATransaction
:
CAAnimation *animation = [self.layer animationForKey:self.layer.animationKeys.firstObject];
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
答案 3 :(得分:1)
如果您定位到 SELECT
ds.disease_type as disease,
SUM(CASE WHEN (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' THEN 1 ELSE 0 END) as patient_count,
SUM(CASE WHEN ((DATE_FORMAT(pdm.visited_date, '%Y-%m-%d')) BETWEEN '2019-04-01' AND '2020-03-01') THEN 1 else 0 end) as disease_morbidity_cumulative_no,
SUM(case when ic.age BETWEEN 0 AND 15 AND ic.gender ='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count1_male,
SUM(case when ic.age BETWEEN 0 AND 15 AND ic.gender ='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count1_female,
SUM(case when ic.age BETWEEN 16 AND 45 AND ic.gender ='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count2_male,
SUM(case when ic.age BETWEEN 16 AND 45 AND ic.gender ='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count2_female,
SUM(case when ic.age >45 AND ic.gender='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count3_male,
SUM(case when ic.age >45 AND ic.gender='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count3_female
FROM (p_d_m pdm)
LEFT JOIN i_card ic ON ic.i_card_id = pdm.i_card_id
LEFT JOIN disease ds ON ds.disease_id = pdm.disease_id
LEFT JOIN village v ON v.village_id = ic.village_id
LEFT JOIN phc p ON p.phc_id = v.phc_id
LEFT JOIN ind_card indc ON indc.ind_card_id = pdm.ind_card_id
LEFT JOIN block b ON b.block_id = p.block_id
LEFT JOIN sub_district s ON s.sub_district_id =b.sub_district_id
LEFT JOIN district d ON d.district_id = s.district_id
GROUP BY ds.disease_id
或更高版本,那么您正在寻找iOS 9.0
的类属性,称为UIView
。
用法:
inheritedAnimationDuration
来自 Apple文档:
摘要
返回当前动画的继承持续时间。
讨论
如果在
let currentAnimationDuration = UIView.inheritedAnimationDuration
动画块中调用此方法,则仅返回非零值。
答案 4 :(得分:0)
由于您正在使用块,为什么不用它来捕获变量?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];