ios - Center a dynamically created UIView over a UILabel in the storyboard not working -


i have uilabel placed on storyboard autolayout. (constraints include height, width , center horizontally, , vertical spacing top).

i have uiview makes circle drawrect method using uibeizerpath.

nothing fancy far.

for simplicity sake using hard coded numbers illustrate problem.

now want circleview placed on uilabel, centering label in circle.

however, can not line correctly. anchor points or messing up.

i tried setting circleview's centerpoint labels center point. no luck.

i tried setting circleviews x location of label minus width divided two. no luck.

the closest can y coordinate. use label.center.y - 52.5 (half of radius).

cv = [[circleview alloc] initwithframe:cgrectmake(whathere.x, whathere.y,                                                       155, 155)]; cv.radius           = 75; cv.strokewidth      = 5; 

the radius of circle 75. width/height of circleview 155 because stroke of circle 5. (radius x 2) + 5, give me view see circle.

enter image description here

the dark background view of ios simulator. have added background colors each of elements distinguish size.

through magic of photoshop here trying accomplish: enter image description here

then you're doing wrong... use constraints !

here storyboard label constraints enter image description here

here viewcontroller

    @interface viewcontroller ()      @property (nonatomic, weak) iboutlet uilabel *centeredlabel;      @end      @implementation viewcontroller      - (void)viewdidload {         [super viewdidload];         // additional setup after loading view, typically nib.          circleview *circleview = [circleview new];         [self.view addsubview:circleview];          circleview.translatesautoresizingmaskintoconstraints = no;          nslayoutconstraint *circlecenterx = [nslayoutconstraint constraintwithitem:circleview                                                                          attribute:nslayoutattributecenterx                                                                          relatedby:nslayoutrelationequal                                                                             toitem:self.centeredlabel                                                                          attribute:nslayoutattributecenterx                                                                         multiplier:1 constant:0];           nslayoutconstraint *circlecentery = [nslayoutconstraint constraintwithitem:circleview                                                                          attribute:nslayoutattributecentery                                                                          relatedby:nslayoutrelationequal                                                                             toitem:self.centeredlabel                                                                          attribute:nslayoutattributecentery                                                                         multiplier:1 constant:0];         cgfloat circlediameter = 155;          nslayoutconstraint *circlewidth = [nslayoutconstraint constraintwithitem:circleview                                                                          attribute:nslayoutattributewidth                                                                          relatedby:nslayoutrelationequal                                                                             toitem:nil                                                                          attribute:nslayoutattributenotanattribute                                                                         multiplier:1 constant:circlediameter];         nslayoutconstraint *circleheight = [nslayoutconstraint constraintwithitem:circleview                                                                          attribute:nslayoutattributeheight                                                                          relatedby:nslayoutrelationequal                                                                             toitem:circleview                                                                          attribute:nslayoutattributewidth                                                                         multiplier:1 constant:0];          [self.view addconstraints:@[circlecenterx, circlecentery, circlewidth, circleheight]];     }      - (void)didreceivememorywarning {         [super didreceivememorywarning];         // dispose of resources can recreated.     }      @end 

here's circleview

    @implementation circleview  - (instancetype)init{     self = [super init];     if (self) {         self.backgroundcolor = [uicolor clearcolor];     }     return self; }  - (void)drawrect:(cgrect)rect {     cgcontextref ctx = uigraphicsgetcurrentcontext();      uicolor *bluetransparent = [[uicolor bluecolor] colorwithalphacomponent:0.4];     [bluetransparent setfill];     cgcontextfillrect(ctx, self.bounds);     uicolor *circlecolor = [uicolor greencolor];     [circlecolor setstroke];      cgcontextsetlinewidth(ctx, 6);     cgcontextstrokeellipseinrect(ctx, self.bounds);  }  @end 

and here's result

enter image description here

piece of cake ! ;)


Comments

Popular posts from this blog

css - SVG using textPath a symbol not rendering in Firefox -

Java 8 + Maven Javadoc plugin: Error fetching URL -

datatable - Matlab struct computations -