Hi guys,
I've an NSView hierarchy with:
                - an NSWindow with inside an NSView (called BaseContainerView) 
(yellow color)
                - inside BaseContainerView another NSView called HostView 
(centered) (orange color)
                - inside HostView.layer a CALayer called subLayer (red color)
 
Now, everything works well when I try convert coordinates through the hierarchy.
That's my code:

- (void) mouseDownOnBaseContainer:(NSNotification *) notif {
     NSEvent *theEvent = notif.object;
     // Location in NSWindow
     CGPoint locationInWindow = theEvent.locationInWindow;
     // Location is root NSView (baseContainerView)
     CGPoint locationInBaseContainer = [baseContainerView 
convertPoint:locationInWindow fromView:nil];
     // Location in sub NSView (hostView)
     CGPoint locationInHostView = [baseContainerView 
convertPoint:locationInBaseContainer toView:hostView];
     // Location in sub CALayer (child of hostView's layer, subLayer)
     CGPoint locationInSubLayer = [hostView.layer 
convertPoint:locationInHostView toLayer:subLayer];
     NSLog(@"--------------- CLICK ---------------");
     NSLog(@"NSWindow:             
{%0.0f,%0.0f}",locationInWindow.x,locationInWindow.y);
     NSLog(@"BaseContainerView:    
{%0.0f,%0.0f}",locationInBaseContainer.x,locationInBaseContainer.y);
     NSLog(@"HostView:             
{%0.0f,%0.0f}",locationInHostView.x,locationInHostView.y);
     NSLog(@"SubLayer:             
{%0.0f,%0.0f}",locationInSubLayer.x,locationInSubLayer.y);
}

If I try to rotate my hostView.layer (CALayer) using the function below I get 
wrong coordinates when I try to click at the same (rotated) point (the top,left 
coordinate of hostView)
 

- (IBAction)btn_rotateHostView:(id)sender {
     isMovingToLandscape = !isMovingToLandscape;
     CALayer *hostViewLayer = hostView.layer;
     hostViewLayer.anchorPoint = CGPointMake(0.5f, 0.5f); // 0.5,0.5 made the 
center of the object
     hostViewLayer.frame = CGRectMake((NSWidth(baseContainerView.frame) - 
NSWidth(hostViewLayer.frame)) / 2.0f,
                                           (NSHeight(baseContainerView.frame) - 
NSHeight(hostViewLayer.frame)) / 2.0f,
                                           hostViewLayer.frame.size.width,
                                           hostViewLayer.frame.size.height);
     [CATransaction begin];
     CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath: 
@"transform"];
     CATransform3D rotateTransform = CATransform3DMakeRotation 
(DEGREES_TO_RADIANS (-90), 0, 0, 1);
     CATransform3D restoreTransform = CATransform3DIdentity;
     animation.fromValue = [NSValue valueWithCATransform3D: 
(isMovingToLandscape ? restoreTransform : rotateTransform)];
     animation.toValue = [NSValue valueWithCATransform3D: (isMovingToLandscape 
? rotateTransform : restoreTransform)];
     animation.duration = 1.25;
     animation.cumulative = NO;
     animation.removedOnCompletion = NO;
     animation.fillMode = kCAFillModeForwards;
     [hostViewLayer addAnimation:animation forKey:@"transform"];
     [CATransaction commit];
}


This is a visual feeback:
http://i.imgur.com/LYywXXL.png

While here i've uploaded source code
https://dl.dropboxusercontent.com/u/103260/TestinLayer.zip

Should I convert coordinates manually? Or convertPoint: methods take in place 
rotation transform?
I should expect 4,5 at the same "logical" point (top-left of rotated hostView)
Any idea?
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to