Чтобы обновить все элементы в массиве, вам нужен позиционный оператор all $ [] , попробуйте:
db.col.update({ "_id" : ObjectId("5c692860843d26064d1f1429") }, { $set: { "rows.$[].baseValue": toValue } })
В противном случае $set
попытается создать новое значение в существующем массиве. что невозможно
Вы можете получить текущее состояние слоя анимации, взяв его presentationLayer. Предполагая, что вы не применили никаких других преобразований к слою, вы можете извлечь текущий угол вращающегося слоя, используя следующий код:
CATransform3D rotationTransform = [(CALayer *)[self.layer presentationLayer] transform];
float angle;
if (rotationTransform.m11 < 0.0f)
angle = 180.0f - (asin(rotationTransform.m12) * 180.0f / M_PI);
else
angle = asin(rotationTransform.m12) * 180.0f / M_PI;
В остальном неизмененном преобразовании значения m11 и m12 являются координатами, лежащими на модуле круг, поэтому вы можете использовать тригонометрию для определения угла, который они описывают.
РЕДАКТИРОВАТЬ (18.05.2009): добавлено преобразование типов в CALayer для устранения предупреждений компилятора и исправлено именование преобразования в операциях тригонометрии.
Это старый вопрос, но я столкнулся с этим ответом, пытаясь найти текущий угол поворота во время анимации ключевого кадра: -
CALayer* layer = [self.layer presentationLayer];
float currentAngle = [[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
Кажется, у меня работает. Также красиво и лаконично.