self.someView.alpha = 1.0
alpha = 1.0
This works because of the special design of CALayer. Every CALayer has two conceptual layers, both exposed as properties. There is the
modelLayer which is what you access and modify through properties like
someView.alpha and generally holds the state of the layer. The model layer updates immediately when you modify related properties, whether or not you're inside a UIView animation block. Then there is also the
presentationLayer which is actually what gets rendered by the system. The presentation layer usually mirrors the model layer, except when animating. I don't know the specifics, but
UIView.animateWithDuration does something to tell CoreAnimation, "when I run this animation block, record the changes in the model layer (diff before and after), and then apply them incrementally to the presentation layer over the given duration".
This is why
someView.alpha is immediately updated despite the animation not having finished, because your code interacts with the model layer. If you access the presentation layer, you will see that the updated value is applied incrementally.