Your solution (delayed performance) is excellent, so there's really no problem. The only question is why your code doesn't work without the delayed performance. I suspect it has to do with these lines:
[self.view addSubview:myView];
[myView setProgress:0.3 animated:YES];
You have ordered the MyView to be added to the interface, but apparently it hasn't really been added yet, at least not in such a way that the interface has settled down and we are ready to add an animation to the layer render tree. Your delayed performance accomplishes exactly what's needed: we wait one cycle of the run loop, and now the interface (including the added MyView) is ready to rock and roll.