Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使视图透明,而不从底部视图查看文本_Iphone_Objective C_Ios5_Uiview - Fatal编程技术网

Iphone 使视图透明,而不从底部视图查看文本

Iphone 使视图透明,而不从底部视图查看文本,iphone,objective-c,ios5,uiview,Iphone,Objective C,Ios5,Uiview,在iPhone日历应用程序中,如果有两个互动程序重叠在彼此的顶部,则底部互动程序中的文本将被切断,无法通过顶部透明互动程序看到。我如何才能保持瓷砖透明,但不让底部瓷砖到顶部瓷砖的文本显示出来 这是我的密码 APCalendarDayTile *tile = (APCalendarDayTile *)view; CGFloat startPos = [APCalendarCurrentDayView yAxisForTime:[APCalendarCurrentDayView minutesToT

在iPhone日历应用程序中,如果有两个互动程序重叠在彼此的顶部,则底部互动程序中的文本将被切断,无法通过顶部透明互动程序看到。我如何才能保持瓷砖透明,但不让底部瓷砖到顶部瓷砖的文本显示出来

这是我的密码

APCalendarDayTile *tile = (APCalendarDayTile *)view;
CGFloat startPos = [APCalendarCurrentDayView yAxisForTime:[APCalendarCurrentDayView minutesToTime:tile.appointment.startDate]];
CGFloat endPos = [APCalendarCurrentDayView yAxisForTime:[APCalendarCurrentDayView minutesToTime:tile.appointment.endDate]];
tile.frame = CGRectMake(kLeftSideBuffer, startPos, (self.bounds.size.width - kLeftSideBuffer - kRightSideBuffer) , endPos - startPos);
tile.backgroundColor = [UIColor colorWithHexString:tile.appointment.appointmentColor]; <-- This also sets the alpha that makes it transparent.
tile.layer.borderColor = [UIColor colorWithHexString:tile.appointment.appointmentColor alpha:1.0].CGColor;
tile.layer.borderWidth = 1.0f;
APCalendarDayTile*tile=(APCalendarDayTile*)视图;
CGFloat startPos=[APCalendarCurrentDayView yAxisForTime:[APCalendarCurrentDayView分钟测试时间:tile.appointment.startDate]];
CGFloat endPos=[APCalendarCurrentDayView-yAxisForTime:[APCalendarCurrentDayView-MinutesTime:tile.appointment.endDate]];
tile.frame=CGRectMake(klefstidebuffer,startPos,(self.bounds.size.width-klefstidebuffer-kRightSideBuffer),endPos-startPos);

tile.backgroundColor=[uicolorWithHexString:tile.appointment.appointmentColor] 我认为本机日历应用程序会挤压在与您相同的开始时间出现的磁贴,但它也会挤压时间重叠的磁贴,即,如果后一个磁贴的开始时间介于前一个磁贴的开始时间和结束时间之间


但是如果你需要你的用户界面来绘制重叠的瓷砖,那就没有办法了:模糊的瓷砖需要知道它在下面(从后面开始并重叠),它需要隐藏标签,或者降低它们的alpha级别。

在两个框之间添加一个
UIView
怎么样?中间的
ui视图
将覆盖字母(并具有与后部事件相同的背景色),这解决了您的问题:没有文本通过,但您将看到另一个标签后面的颜色


您可以使用
UILabel
的frame属性以及最前面日历约会的
frame
属性为此
UIView
创建
frame

@user1272965是正确的,因为每个磁贴都需要知道上面有哪些磁贴,然后,通过将平铺视图设置为自定义子类并手动实现其图形,可以获得所需的文本效果:

每个磁贴都需要访问其上方的磁贴(或至少其框架):

然后绘制文本,文本将被上面的框架剪裁

[myCalendarString drawAtPoint:CGPointMake(10,10)];

隐藏标签不是苹果的做法。从我的截图可以看出,你可以看到字母的上半部分。如果有什么区别的话,苹果只是改变了标签的大小,使之与前瓷砖的顶部相匹配。UIView必须是透明的,这样你才能看到它们下面的时间线。如果你打算-1并投票关闭,至少要公布原因。这听起来好像可以做到。有空的时候我会试试的。
NSInteger tileCount = [tilesAboveMine count];
CGRect framesAboveMine[tileCount];

for (int i=0; i<tileCount; i++) {
    framesAboveMine[i] = [tilesAboveMine objectAtIndex:i].frame;
}
// draw aspects of the tile not to be clipped, like the background image.
// the setup for clipping:

CGContextClipToRects(context, framesAboveMine, tileCount);
[myCalendarString drawAtPoint:CGPointMake(10,10)];