Ok, there is more than one way to do this.
(1) You could add the bubble view to your scrollview. It's position will remain anchored but will need to be resized when zooming occurs. Do this in the scrollView delegate method - scrollViewDidZoom when zooming occurs.
(2) You could not add it to the scrollView but instead add it to say your ViewController's view (after the scrollView was added to the VC's view). Then you will not need to resize the bubble view but you will need to reposition it in the scrollView delegate - scrollViewDidScroll method when scrolling occurs.
Either way, the scrollView.zoomScale property is the link to the new size or position of your bubble view.
I'll describe method 2 above. First position the bubble view in the VC's view. Decide on an anchor point for the bubble view, i.e. where you want to place it in relation to the scrollView. I will pick a point (for the bubble view's center) from a point in the scrollView, say (500, 200) and map it to a point in my VC's view.
So in the VC's viewWillAppear method I'll put
CGPoint p = [self.view convertpoint:CGPointMake(500*self.scrollView.zoomScale, 200*self.scrollView.zoomScale) fromView:self.scrollView];
self.bubbleView.center = p;
Assuming I start of with a zoomScale of 1.0f when viewDidLoad occurs, this will correspond to the point (500, 200) in the scrollView.
Now we just want to maintain that relationship between the bubble view's center position when scrolling occurs.
- (void)scrollviewDidScroll:(UIScrollView *)scrollView
{
CGPoint p = [self.view convertpoint:CGPointMake(500*self.scrollView.zoomScale, 200*self.scrollView.zoomScale) fromView:self.scrollView];
self.bubbleView.center = p;
}