drawRectでUIViewを再描画していて、UIViewのレイヤが入れ替わってしまった(当然だが)。 UIViewの入れ替えはどのGUIアプリでもよく問題となるので、ちょっと調べてみた。
@interface UIView(UIViewHierarchy)に定義されている。
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
- (void)didAddSubview:(UIView *)subview;
- (void)willRemoveSubview:(UIView *)subview;
- (void)willMoveToSuperview:(UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(UIWindow *)newWindow;
- (void)didMoveToWindow;
メソッド名からしてだいたい想像がつくでしょう。 一般的にはViewの単純な追加は addSubview を利用するが、予め設計ができていればむしろinsertSubview系で追加する方が良いかも知れないですね。
view1をview2より前面に表示させるには、
[view1 bringSubviewToFront:view2];
また、UIScrolViewのマウスイベントでページングやスクロールしてしまう場合は、レイヤを変えずにプロパティを無効にする方法もあるか?
scrollView.pagingEnabled = NO;
scrollView.scrollEnabled = NO;