UIButton
의 하위 클래스가 있습니다. 여기에서 사용자 정의 찾고 단추에 대해 drawRect
을 덮어 씁니다.UIButton 하위 클래스를 강조 표시하는 방법은 무엇입니까?
하지만 이제 셀이 강조 표시되지 않습니다.
어떻게 해결할 수 있습니까?
셀을 눌렀을 때 다른 사용자 정의 drawRect에 대한 코드를 준비했습니다.
- (void)drawRect:(CGRect)rect
{
//// General Declarations
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
//// Color Declarations
UIColor* red = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: 1];
CGFloat redRGBA[4];
[red getRed: &redRGBA[0] green: &redRGBA[1] blue: &redRGBA[2] alpha: &redRGBA[3]];
UIColor* darkRed = [UIColor colorWithRed: (redRGBA[0] * 0.8) green: (redRGBA[1] * 0.8) blue: (redRGBA[2] * 0.8) alpha: (redRGBA[3] * 0.8 + 0.2)];
UIColor* lightRed = [UIColor colorWithRed: (redRGBA[0] * 0.8 + 0.2) green: (redRGBA[1] * 0.8 + 0.2) blue: (redRGBA[2] * 0.8 + 0.2) alpha: (redRGBA[3] * 0.8 + 0.2)];
//// Gradient Declarations
NSArray* redGradientColors = [NSArray arrayWithObjects:
(id)darkRed.CGColor,
(id)lightRed.CGColor, nil];
CGFloat redGradientLocations[] = {0, 1};
CGGradientRef redGradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)redGradientColors, redGradientLocations);
//// Shadow Declarations
CGColorRef shadow = [UIColor lightGrayColor].CGColor;
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 1;
CGColorRef shadow2 = [UIColor blackColor].CGColor;
CGSize shadow2Offset = CGSizeMake(0, -0);
CGFloat shadow2BlurRadius = 2;
//// Rounded Rectangle Drawing
UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(35, 5, 250, 50) cornerRadius: 6];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadow2Offset, shadow2BlurRadius, shadow2);
CGContextSetFillColorWithColor(context, shadow2);
[roundedRectanglePath fill];
[roundedRectanglePath addClip];
CGContextDrawLinearGradient(context, redGradient, CGPointMake(160, 55), CGPointMake(160, 5), 0);
////// Rounded Rectangle Inner Shadow
CGRect roundedRectangleBorderRect = CGRectInset([roundedRectanglePath bounds], -shadowBlurRadius, -shadowBlurRadius);
roundedRectangleBorderRect = CGRectOffset(roundedRectangleBorderRect, -shadowOffset.width, -shadowOffset.height);
roundedRectangleBorderRect = CGRectInset(CGRectUnion(roundedRectangleBorderRect, [roundedRectanglePath bounds]), -1, -1);
UIBezierPath* roundedRectangleNegativePath = [UIBezierPath bezierPathWithRect: roundedRectangleBorderRect];
[roundedRectangleNegativePath appendPath: roundedRectanglePath];
roundedRectangleNegativePath.usesEvenOddFillRule = YES;
CGContextSaveGState(context);
{
CGFloat xOffset = shadowOffset.width + round(roundedRectangleBorderRect.size.width);
CGFloat yOffset = shadowOffset.height;
CGContextSetShadowWithColor(context,
CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)),
shadowBlurRadius,
shadow);
[roundedRectanglePath addClip];
CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(roundedRectangleBorderRect.size.width), 0);
[roundedRectangleNegativePath applyTransform: transform];
[[UIColor grayColor] setFill];
[roundedRectangleNegativePath fill];
}
CGContextRestoreGState(context);
CGContextRestoreGState(context);
[[UIColor blackColor] setStroke];
roundedRectanglePath.lineWidth = 1;
[roundedRectanglePath stroke];
//// Cleanup
CGGradientRelease(redGradient);
CGColorSpaceRelease(colorSpace);
}
여기에 몇 가지 코드를 게시하시기 바랍니다에 색상이나 이미지를 변경할 수 있습니다
아래에 이러한 방법으로 하이라이트 문제를 해결 수 있다고 생각합니다. –
게시 된 코드 위 – Jon