У меня есть слой с некоторым сложным кодом для прорисовки в его-drawInContext: метод. Я пытаюсь минимизировать сумму рисования, которое я должен сделать, таким образом, я использую-setNeedsDisplayInRect: обновить просто измененные части. Это работает блестяще. Однако, когда графическая система обновляет мой слой, она переходит от старого до нового изображения с помощью плавно накладывания. Я хотел бы, чтобы это переключилось немедленно.
Я попытался использовать CATransaction, чтобы выключить действия и обнулить продолжительность и никакую работу. Вот код, который я использую:
[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];
Есть ли другой метод на CATransaction, который я должен использовать вместо этого (я также попробовал-setValue:forKey: с kCATransactionDisableActions, тем же результатом).
Вы можете сделать это, установив словарь действий на слое так, чтобы он возвращал [NSNull null]
в качестве анимации для соответствующего ключа. Например, я использую
NSDictionary *newActions = @{
@"onOrderIn": [NSNull null],
@"onOrderOut": [NSNull null],
@"sublayers": [NSNull null],
@"contents": [NSNull null],
@"bounds": [NSNull null]
};
layer.actions = newActions;
для отключения анимации постепенного появления / исчезновения при вставке или изменении подслоев в одном из моих слоев, а также при изменении размера и содержимого слоя. Я считаю, что ключ contents
- это тот, который вы ищете, чтобы предотвратить перекрестное затухание на обновленном чертеже.
Версия Swift:
let newActions = [
"onOrderIn": NSNull(),
"onOrderOut": NSNull(),
"sublayers": NSNull(),
"contents": NSNull(),
"bounds": NSNull(),
]