Skip to main content

Anti-aliasing lines when using CATransform3DRotate



I copied the code from the answer to How do I apply a perspective transform to a UIView? in order to achieve the following image. Note, however, the jagged lines separating the levels. Is there away to perform this kind of perspective transformation in a way that anti-aliases these jagged lines?





enter image description here





Edit I've tried the solutions offered by DarkDust in the comments on this post. None seem to work. Here's my code:







levelView = [[UIControl alloc] initWithFrame:CGRectMake(100, 60, 160, 230)];

[self addSubview:levelView];

levelView.transform = CGAffineTransformScale(self.transform, .8, .8);



CALayer *layer = levelView.layer;



//DarkDust's 2nd comment

layer.borderWidth = 1;

layer.borderColor = [[UIColor clearColor] CGColor];



CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;

rotationAndPerspectiveTransform.m34 = 1.0 / 1000;

rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);

layer.transform = rotationAndPerspectiveTransform;



for (NSString *ID in [NSArray arrayWithObjects:@"Level 1", @"Level 2", @"Level 3", @"Level 4", @"Level 5", nil]) {



//Note the offset of 5 from the superview in both X and Y directions. This addresses DarkDusk's first comment

UIControl *ctrl = [[UIControl alloc] initWithFrame:CGRectMake(5, y + 5, levelView.frame.size.width, 220/5)];

[levelView addSubview:ctrl];

[ctrl addTarget:self action:@selector(languageSelected:) forControlEvents:UIControlEventTouchDown];

[self styleEnabled:ctrl];



UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(13, 0, ctrl.frame.size.width - 13, ctrl.frame.size.height)];

[ctrl addSubview:label];

label.text = ID;

label.font = [UIFont systemFontOfSize:20];

label.textColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:.8];

label.backgroundColor = [UIColor clearColor];



y += ctrl.frame.size.height;

}







The level buttons you see in the image are all instances of UIControl , and they are the direct subviews of UIControl *levelView . levelView is the one that is getting transformed.





The other two of DarkDusk's comments refer specifically to UIImages, which I am not using. If they are still applicable and someone can explain how to implement them, I'll certainly give them a shot.


Comments

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.