2011-11-01 5 views
0

J'ai un UIImage avec les propriétés suivantes:Conserver la taille/position CALayer sur UIView lors d'une rotation

imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
imageView.contentMode = UIViewContentModeScaleAspectFit; 

Plus tard ajouter une coutume CALayer à la imageview à une position donnée. Lorsque je fais pivoter mon imageview, l'image est mise à l'échelle pour s'adapter (étant donné le contentMode), mais mon CALayer est mal positionné. Apparemment seulement la position Y est fausse. Comment puis-je repositionner correctement mon CALayer lorsque la vue est pivotée?

Répondre

0

Pour autant que je sache, afin de positionner/mise en page de votre couche personnalisée, vous devez sous-classe votre imageview et mettre en œuvre cette méthode:

- (void) layoutSublayersOfLayer:(CALayer*)layer 
{ 
    [super layoutSublayersOfLayer:layer]; 

    self.customlayer.position = CGPointMake(
      self.bounds.size.width/2, self.bounds.size.height/2); 
} 

Si vous ne voulez pas sous-classe imageview, vous pouvez essayer par ici. Ce code doit être dans votre imageview-controller:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.container = [CALayer layer]; 
    self.container.bounds = self.imageview.bounds; 
    self.container.delegate = self; 

    [self.container addSublayer:self.customlayer]; 
    [self.imageview.layer addSublayer:self.container]; 
} 

- (void) layoutSublayersOfLayer:(CALayer*)layer // this is layers delegate method 
{ 
    if (layer == self.container) 
    { 
     self.customlayer.position = CGPointMake(self.container.bounds.size.width/2, 
               self.container.bounds.size.height/2); 
    } 
}