В симуляторе мой метод анимации работает плавно. К сожалению, кажется, что он очень рывком работает на iPhone 4.Моя анимация UIView вялая - как я могу оптимизировать следующий код?
Я не уверен на 100%, что лучший и быстрый способ сделать анимацию - так что все советы о том, как я могу оптимизировать или полностью изменить свой код на скорость эта анимация была бы очень оценена!
Примечания:
Это уже в основном потоке, так ли это сделать "dispatch_async (dispatch_get_main_queue()) называют несущественными или бесполезным?
Есть ли способ предварительно загрузить эту анимацию?
Есть ли способ увидеть, какая часть кода выполняет большую часть замедления?
Существует только около 3 или 4 вида в extensionView.subviews.
Я собрал с -О.
- (void)extendWithAnimation:(BOOL)animated; {
isExtended = YES;
extensionView.hidden = NO;
topShadowView.hidden = NO;
topShadowView.frame = CGRectMake(0, defaultHeight, topShadowView.frame.size.width, topShadowView.frame.size.height);
topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, 0);
extensionView.frame = CGRectMake(0, defaultHeight - 8, DEVICE_WIDTH, extensionHeight + 8);
extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, 0);
for (UIView *view in extensionView.subviews) {
view.transform = CGAffineTransformMakeTranslation(0, -(extensionHeight+8));
}
dispatch_async(dispatch_get_main_queue(), ^{
if (animated) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
}
extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, extensionHeight + 8);
topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, extensionHeight + 8);
for (UIView *view in extensionView.subviews) {
view.transform = CGAffineTransformIdentity;
}
if (animated) {
[UIView commitAnimations];
}
});
}
Решение:
решаемые (спасибо Аарон!).
Окрашенные тени убивают анимацию большое время! Не используйте основные свойства теневой графики, если вы планируете анимацию - в моем случае только несколько теней уменьшили частоту кадров в три раза.
Эффект теневого рисования CALayer значительно улучшен, если вы указали shadowPath для слоя, вы можете попробовать это, прежде чем вырвать весь ваш код ... – jrturton
@jrturton интересно, к сожалению, это не будет работать для UITextView, который где проблема для меня. Но для других с похожими проблемами, которые звучат как очень хорошая точка! –