1
A
回答
-1
你可以找到所有的细节和一些原始的OBJ-C代码here (gist)。代码不完整,但足以启动。
这里只绘制背景图片代码:
- (UIImage*)hintImage {
CGMutablePathRef path = CGPathCreateMutable();
CGPoint p = CGPointMake(__PADDING_X, __PADDING_Y);
CGPoint p1 = CGPointZero;
CGPoint p2 = CGPointZero;
//1
p.x += __PAN_UPPER_RADIUS;
CGPathMoveToPoint(path, NULL, p.x, p.y);
NSUInteger hintCount = [self.hintSymbolsList count];
//!!!:magic numbers
self.hintAdditionalWidth = 2*(hintCount-1)*(self.frame.size.width+__GAP_X);
//2
p.x += __PAN_UPPDER_WIDTH + self.hintAdditionalWidth;
//!!!:+hintCount*(__PAN_LOWER_WIDTH+__GAP_X);
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//3
p.y += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
3.0*M_PI/2.0,
4.0*M_PI/2.0,
false);
p.x += __PAN_UPPER_RADIUS;
//4
p.y += __PAN_UPPER_HEIGHT - __PAN_UPPER_RADIUS;
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
p.y += - 2*__PAN_UPPER_RADIUS + __PAN_CURVE_SIZE + __PAN_MIDDLE_HEIGHT;
} else { //ACHintPositionLeft & ACHintPositionFarLeft
p.y -= __PAN_CURVE_SIZE;
}
CGPathAddLineToPoint(path, NULL, p.x, p.y);
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
//5.1
p.x -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
4.0*M_PI/2.0,
1.0*M_PI/2.0,
false);
p.y += __PAN_UPPER_RADIUS;
//5.2
p.x -= self.hintAdditionalWidth + __PAN_UL_WIDTH-2*__PAN_UPPER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//5.3
p.y += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
3.0*M_PI/2.0,
2.0*M_PI/2.0,
true);
p.x -= __PAN_UPPER_RADIUS;
} else { //ACHintPositionLeft & ACHintPositionFarLeft
//5
p1 = CGPointMake(p.x, p.y + __PAN_CURVE_SIZE);
p.x -= __PAN_UL_WIDTH;
p.y += __PAN_MIDDLE_HEIGHT + __PAN_CURVE_SIZE*2;
p2 = CGPointMake(p.x, p.y - __PAN_CURVE_SIZE);
CGPathAddCurveToPoint(path, NULL,
p1.x, p1.y,
p2.x, p2.y,
p.x, p.y);
}
//6
p.y += __PAN_LOWER_HEIGHT - __PAN_CURVE_SIZE - __PAN_LOWER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//7
p.x -= __PAN_LOWER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_LOWER_RADIUS,
4.0*M_PI/2.0,
1.0*M_PI/2.0,
false);
//8
p.x -= __PAN_LOWER_WIDTH;
p.y += __PAN_LOWER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//9
p.y -= __PAN_LOWER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_LOWER_RADIUS,
1.0*M_PI/2.0,
2.0*M_PI/2.0,
false);
//10
p.x -= __PAN_LOWER_RADIUS;
p.y -= __PAN_LOWER_HEIGHT - __PAN_LOWER_RADIUS - __PAN_CURVE_SIZE;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
//11
p1 = CGPointMake(p.x, p.y - __PAN_CURVE_SIZE);
p.x -= __PAN_UL_WIDTH;
p.y -= __PAN_MIDDLE_HEIGHT + __PAN_CURVE_SIZE*2;
p2 = CGPointMake(p.x, p.y + __PAN_CURVE_SIZE);
CGPathAddCurveToPoint(path, NULL,
p1.x, p1.y,
p2.x, p2.y,
p.x, p.y);
} else { //ACHintPositionLeft & ACHintPositionFarLeft
//11.1
p.x -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
4.0*M_PI/2.0,
3.0*M_PI/2.0,
true);
p.y -= __PAN_UPPER_RADIUS;
//11.2
p.x -= self.hintAdditionalWidth + __PAN_UL_WIDTH-2*__PAN_UPPER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//11.3
p.y -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
1.0*M_PI/2.0,
2.0*M_PI/2.0,
false);
p.x -= __PAN_UPPER_RADIUS;
}
//12
p.y -= __PAN_UPPER_HEIGHT - __PAN_UPPER_RADIUS;
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
p.y += __PAN_CURVE_SIZE;
} else {
p.y -= - 2*__PAN_UPPER_RADIUS + __PAN_CURVE_SIZE + __PAN_MIDDLE_HEIGHT;
}
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//13
p.x += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
2.0*M_PI/2.0,
3.0*M_PI/2.0,
false);
//----
CGContextRef context;
UIGraphicsBeginImageContext(CGSizeMake(__WIDTH+self.hintAdditionalWidth,
__HEIGHT));
context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, __HEIGHT);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextAddPath(context, path);
CGContextClip(context);
//----
CGRect frame = CGPathGetBoundingBox(path);
CGColorRef backColor = [UIColor whiteColor];
CGContextSetFillColorWithColor(context, backColor);
CGContextFillRect(context, frame);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage * image = [UIImage imageWithCGImage:imageRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationDown];
CGImageRelease(imageRef);
UIGraphicsEndImageContext();
CFRelease(path);
return image;
}
相关问题
- 1. 自定义表情符号键盘IOS
- 2. 我的自定义键盘中的Apple表情符号键盘
- 3. 在自定义键盘中添加表情符号
- 4. 添加自定义按钮到数字键盘的键盘ios 6
- 5. 在自定义键盘中添加下一个按钮
- 6. iOS键盘和自定义按钮
- 7. 自定义键盘退格按钮
- 8. 添加一个按钮隐藏键盘
- 9. 如何将自定义按钮添加到键盘?
- 10. 自定义按钮添加到数字键盘的问题
- 11. 如何将自定义按钮添加到我的键盘?
- 12. 按按钮自定义键盘时播放声音点击按钮定制键盘XAMARIN
- 13. 如何在默认Android键盘中添加按键/自定义按键
- 14. 表情符号键盘
- 15. 如何制作按钮按钮类型(自定义键盘)
- 16. 软键盘按钮
- 17. onClickListener键盘按钮
- 18. 将按钮添加到软键盘
- 19. 在不按键盘按键的情况下触发键盘按键事件
- 20. 多键盘按下
- 21. 创建类似表情符号的自定义键盘
- 22. 创建自定义表情符号iOS键盘
- 23. 如何在ios中创建自定义表情符号键盘?
- 24. 如何使用表情符号创建自定义键盘
- 25. Android中的表情符号自定义键盘
- 26. 自定义数字键盘与$符号
- 27. 自定义键盘符号代码android
- 28. Android手柄“搜索”按钮按下自定义键盘
- 29. 添加IPad键盘的按键
- 30. 当选择UITextField时,在iphone键盘上添加自定义图像按钮
您需要绘制使用'UIBezierPath'布局和做addSubView为好。 – iphonic
@iphonic。感谢您的指导。任何参考链接或示例代码? – kb920
对不起,我没有任何示例代码,因为我从来没有尝试过。但是这是你必须做的,[看看这个](https://github.com/mindbrix/TurtleBezierPath),你可以如何绘制布局,它看起来很简单,需要编程和计算。祝你好运。 – iphonic