Aller au contenu


iPhone SDK: modifier dynamiquement la property « frame » d’une MPVolumeView

Dans une application en cours de développement pour l’iPhone (SDK 2.2.1), j’utilise la classe MPVolumeView pour afficher un contrôle de volume dans une vue.  Or, j’ai besoin de déplacer ce contrôle de manière dynamique dans ma vue, même après son chargement.  Cette classe héritant de UIView, j’ai tenté d’utiliser la propriété frame pour repositionner mon contrôle après que la vue ait été déjà construite. Pour donner un exemple concret:

1
2
3
4
5
6
7
8
9
10
11
12
13
- (void) viewDidLoad {
	//...
	volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(20,380,195,20)];
	volumeView.tag = 100;
	[self.view addSubview:volumeView];
	[volumeView release];
	//...
}
 
- (void) updateVolumeViewPosition {
	MPVolumeView *vol = (MPVolumeView *)[self.view viewWithTag:100];
	vol.frame = CGRectMake(60, 380, 195,20); // n'a aucun effet
}

Il s’est avéré que changer cette propriété de ma vue MPVolumeView n’a aucun effet… Bug ? Pas bug ?

La solution que j’ai trouvée pour contourner ce petit soucis, est de placer ma volumeView en tant que subview d’un « container » UIView, et de changer la propriété frame de ce container.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (void) viewDidLoad {
	//...
	volumeViewContainer = [[UIView alloc] initWithFrame:CGRectMake(20,380,195,20)];
	volumeViewContainer.tag = 100;
	volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0,0,195,20)];
	[volumeViewContainer addSubview:volumeView];
	[volumeView release];
	[self.view addSubview:volumeViewContainer];
	[volumeViewContainer release];
	//...
}
 
- (void) updateVolumeViewPosition {
	UIView *volContainer = (UIView *)[self.view viewWithTag:100];
	volContainer.frame = CGRectMake(60, 380, 195,20);
}

Posté dans développement, iPhone. Tags , , .

0 commentaire(s)

Quelques tags HTML sont acceptés

(obligatoire)

(obligatoire, mais ne sera pas diffusé)

ou faire un rétrolien depuis votre site.