react-native - React Native SVG Mask子不转换
问题描述
我在可缩放图像上画了几个圆圈。我希望圆圈是孔视图,以便孔突出显示其后面的图像。所以我使用蒙版来绘制矩形以使图像变暗,然后用圆圈突出图像的某些部分。我将蒙版和矩形组合在一起,并对蒙版进行转换。当图像没有放大时,一切都很完美。当我放大并平移图像时,圆圈保持在应有的位置,但背景矩形不会从转换中转换。
<Svg
height={imageDetails.HEIGHT}
width={imageDetails.WIDTH}
pointerEvents='none'>
<G transform={{
translateX: delta.x,
translateY: delta.y,
scale: delta.zoom
}} >
<Defs>
<Mask id={`clip`} >
<Rect fill="#fff" strokeWidth='5' stroke='white'
originX={delta.x * delta.zoom}
width={imageDetails.WIDTH * delta.zoom} height={imageDetails.HEIGHT} />
{data.map(item =>
<Circle r={item.size} cx={item.x} cy={item.y} key={item.key} fill='#000' />
)}
</Mask>
</Defs>
<Rect width={imageDetails.WIDTH} height={imageDetails.HEIGHT} clipRule={'evenodd'}
fillRule={'nonzero'} stroke='blue' strokeWidth='2' vectorEffect='inherit'
fill="rgba(0,0,0,.5)" fillOpacity='.7' mask={`url(#clip)`} />
</G>
</Svg>
我一直在尝试改变面具和里面的矩形,但没有。
这是我的屏幕截图,显示了完整的图像,然后放大,放大甚至更多。
解决方案
所以我对 SVG 的了解是有限的,但我正在学习。我认为正在发生的事情是转换被应用于所有内容,但被蒙版的矩形宽度和高度被设置为一个值。在进行缩放时,宽度和高度保持完全相同,这就是它被切断的原因。我必须更改它,以便将转换应用于蒙版圆圈。因此,蒙版矩形将始终填满整个屏幕,而圆圈将接受变换。希望这可以帮助任何面临这个问题的人。
<Svg
height={imageDetails.HEIGHT}
width={imageDetails.WIDTH}
pointerEvents='none'>
<G >
<Defs>
<Mask id={`clip`} >
<Rect fill="#fff" width='100%' height='100%' />
{data.map(item =>
<Circle
transform={{
translateX: delta.x,
translateY: delta.y,
scale: delta.zoom
}}
r={item.size} cx={item.x} cy={item.y} key={item.key} fill='#000' />
)}
</Mask>
</Defs>
<Rect width='100%' height='100%'
fill="rgba(0,0,0,.5)" fillOpacity='.7' mask={`url(#clip)`} />
</Svg>
推荐阅读
- operating-system - MMU如何获取中断向量的物理地址?
- php - PhpMailer 不在邮件正文中嵌入图像但附加
- javascript - 如何在 WebStorm 的外部库中加载 jQuery?
- mysql - 如何添加在同一个表中选择的临时列?
- c# - 将 LINQ 连接查询转换为 DataTable
- javascript - 在 render() 之前使用什么组件生命周期来做某事?
- python - AttributeError:Layer 没有入站节点,或者 AttributeError:Layer 从未被调用过
- angular - 在 Ionic App 中将导航参数从一个组件传递到应用程序组件时显示错误
- java - com.parse.ParseObject 不能强制转换为
- javascript - 用“role=button”模拟一个 div 元素的点击——JavaScript