If it imageViewArrayreally contains initialized views, and if these views already have the correct attributes frame, you are not doing anything wrong (even if your code may be more elegant).
Also, of course, we need to make sure that the canvasView is really initialized and visible on the screen. Try setting backgroundColor to something noticeable:
canvasView.backgroundColor = [UIColor greenColor];
, , canvasView, , , , , .
for (UIView *imageView in imageViewArray)
{
NSLog(@"%@", imageView);
[canvasView addSubview:imageView];
}