????作為一名程序員,最怕的產(chǎn)品是什么樣的? 沒(méi)錯(cuò),就是那種覺(jué)得你做起來(lái)應(yīng)該很容易的產(chǎn)品。
?? 好吧,也都是怪小弟學(xué)藝不精。
?? 是有這么一個(gè)UI圖,

我反正是沒(méi)有玩過(guò)這個(gè)·當(dāng)時(shí)就一臉懵圈了,主要是時(shí)間還很急。
后來(lái)是用的這么一個(gè)思路解決了它。大致做出了這么個(gè)樣子吧。
這里我就按我的這個(gè)思路來(lái)說(shuō)一下是怎么做的吧。
后面的顏色條,我是直接找UI 要的一張圖。然后小圓圈懟一個(gè)拖拽手勢(shì),獲取imgView上的顏色。小圓圈每次的位置都是計(jì)算的·=-= 有點(diǎn)苦逼。當(dāng)然了 我只是提供這一種搞法而已咯。
獲取view上的顏色:
- (UIColor *)colorOfPoint:(CGPoint)point {
unsigned char pixel[4] = {0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(context, -point.x, -point.y);
[self.imgView.layer renderInContext:context];
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0];
if (pixel[0]==0&&pixel[1]==0&&pixel[2]==0) {
return [UIColor clearColor];
}
return color;
}
我這邊取顏色加了個(gè)判斷,UI給的圖中間都是透明背景的,所以中間不是彩色的部分我就用這個(gè)來(lái)判斷的。
給圓圈加一個(gè)拖拽手勢(shì):
-(void)panBtn:(UIPanGestureRecognizer *)pan
{
CGPoint loc = [pan locationInView:self.imgView];
CGFloat radius=W(107);
CGFloat imgRadius=self.imgView.width/2;
NSLog(@"--hj%@",[self colorOfPoint:loc]);
//判斷是否在彩色圓上
if (!CGColorEqualToColor([self colorOfPoint:loc].CGColor, [UIColor clearColor].CGColor)) {
CGFloat currentX=fabs(loc.x-imgRadius);
CGFloat currentY=fabs(loc.y-imgRadius);
CGFloat z= hypotf(currentX,currentY);
CGFloat x=(currentX/z)*radius;
CGFloat y=(currentY/z)*radius;
CGFloat btnX,btnY;
if (loc.x>=imgRadius) {
btnX=x+imgRadius;
}else
{
btnX=imgRadius-x;
}
if (loc.y>=imgRadius) {
btnY=y+imgRadius;
}else
{
btnY=imgRadius-y;
}
self.sliderBtn.center=CGPointMake(btnX, btnY);
}
if (pan.state == UIGestureRecognizerStateEnded) {
[self colorOfPoint:self.sliderBtn.center];
}
}
radius 這個(gè)是彩色圓圈中間的點(diǎn)到它中心的距離,用來(lái)算小圓圈的中心位置。
里面的算法也就是根據(jù)什么斜邊啊等等,算出小圓圈的中心坐標(biāo)位置,因?yàn)槟憧赡芡系狞c(diǎn)不在中心,所以你的把小圓圈的中心調(diào)整到正確的位置, 這個(gè)算法解釋的好累,自己研究吧,就是三角函數(shù)來(lái)的嘛。這個(gè)時(shí)候才覺(jué)得讀點(diǎn)書(shū)還是不錯(cuò)的。哈哈。
然后你可以在手勢(shì)結(jié)束后,或者實(shí)時(shí)拿到小圓圈所在的顏色了。這個(gè)就看各自的需求了。
做出來(lái)是這么個(gè)樣子:

一點(diǎn)偏差不用在意這些細(xì)節(jié),或或或。
這就結(jié)束了, 好像也不難, 還是自己技術(shù)不夠強(qiáng)勢(shì)喲。
思路,思路 很重要啊·阿西吧。
-------------大佬勿噴。